Bash 文字列スライシングで式出力を使用する

Bash 文字列スライシングで式出力を使用する

長さが不明なパスからファイル名の部分文字列を抽出したいと思います。 2つの部分を別々にすることもできますが、一時変数を使用せずに2つの部分を結合する方法があるかどうか疑問に思います。

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}が、これにより重大な代替エラーが発生しました。これを行うためのヒントはありますか?

ベストアンサー1

問題に異なるアプローチをとり、機能のみを使用して1行のソリューションを提供してください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」で終わる文字列変数に依存します。ここで、「##」は興味のある2桁、「XXXX」は文字列の最後の4文字です。

おすすめ記事