Bash

在 bash 字元串切片中使用表達式的輸出

  • August 8, 2020

我想從長度未知的路徑中提取文件名的子字元串。我可以分別做這兩個部分,但我想知道是否有辦法在沒有臨時變數的情況下將兩者結合起來?

INPUT_PATH=/path/to/subfolder/file_17.txt 
# I would like to extract "17", the filname will always be 'file_XX.txt'
# The subfolder name is variable length 

TMP=$(basename ${INPUT_PATH})
FILE_NUMBER=${TMP:5:2}
echo ${FILE_NUMBER} # This works as expected

我試過${$(basename $INPUT_PATH):5:2}了,但這給出了一個糟糕的替換錯誤。這樣做有什麼訣竅嗎?

採用不同的方法解決問題並提供僅使用功能的單線解決方案bash

$ cat demo.sh
#!/bin/bash

INPUT_PATH=/path/to/subfolder/file_17.txt

FILE_NUMBER=${INPUT_PATH:((${#INPUT_PATH} -6)):2}
echo ${FILE_NUMBER}
$

$./demo.sh
17

一種更簡單的方法是從字元串的末尾倒數,即

FILE_NUMBER=${INPUT_PATH: -6:2}

顯然,此解決方案取決於以“##XXXX”結尾的字元串變數,其中“##”是感興趣的兩位數字,“XXXX”是字元串的最後 4 個字元。

引用自:https://unix.stackexchange.com/questions/603384