パラメータ拡張から文字列(ファイル名など)の最後の10文字を抽出します。

パラメータ拡張から文字列(ファイル名など)の最後の10文字を抽出します。

変数にはファイル名(拡張子は含まれていますが、絶対パス名ではありません)があり、パラメータ拡張fileでデフォルト名の最後の10文字のみを取得しようとします。

例:fileファイル名が含まれていますA_text_document_1234567890.txt

望ましい出力: 1234567890

以下を${file%.*}使用して拡張を削除できることを知っています。echo ${file%.*}A_text_document_1234567890

そうすればgetをbase=${file%.*}使うことができます。 2番目の変数を使用せずにパラメータ拡張の1つのステップでこれを実行できますか?${base: -10}1234567890

私の本当の質問は、これら2つのパラメータ拡張を1つにまとめる方法です。

答え1

file=abcdefghijklm
echo ${file: -10}
defghijklm

パラメータ拡張とバリアントを区別するには、コロンの後にスペースが必要です${var:-default}


2番目の変数を使用します。

$ tmp=${file%.*}; echo "${tmp:(-10)}"
1234567890

正規表現を使用してください。

$ [[ $file =~ (.{10})(\.[^.]*)?$ ]] && echo "${BASH_REMATCH[1]}"
1234567890

関連情報