変数にはファイル名(拡張子は含まれていますが、絶対パス名ではありません)があり、パラメータ拡張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