Bash
在 bash 字元串切片中使用表達式的輸出
我想從長度未知的路徑中提取文件名的子字元串。我可以分別做這兩個部分,但我想知道是否有辦法在沒有臨時變數的情況下將兩者結合起來?
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 個字元。