次のbashスクリプトを考えてみましょう。
#!/bin/bash
echo "${1##*.}"
ファイル名が最初のコマンドライン引数として指定された場合、このスクリプトはファイル拡張子を次のように出力します。
$ ./script.sh ./file.pdf
上記の場合にpdf
印刷されます。
${1##*.}
この式がファイル拡張子を抽出する方法を説明してください。
(私は$ 0、$ 1、$ 2、$#がbashで何をするのか理解し、正規表現もある程度理解しています)
ベストアンサー1
Bashパラメーター拡張は、変数を拡張するときの値に対するさまざまな変更をサポートします。その一つは##
、値の最長の接頭辞を削除します。パターンマッチ(モードはいいえ正規表現はここから)。
この場合のパターンはです*.
。後ろにゼロ個以上の文字がある場合は、.
最後の${x##*.}
文字まですべての文字列を削除.
し、その点以降のすべての文字を保持するという意味です。
${1##*.}
は通常、を使用してアクセスする最初の位置パラメータの値に拡張することを意味します$1
。最終結果は
echo "${1##*.}"
.
次に、ファイル拡張子である最後のパラメータの後にスクリプトの最初のパラメータ部分を印刷します。
パターンならいいえ正確な一致の場合、変数の合計値は未使用のように拡張されます##
。この場合、指定した引数が.
まったく存在しない場合は再度取得します。
Bashはまた、最短の一致プレフィックスを削除するための単一の使用をサポートし#
、%
文字列の終わりを一致させるために同じ方法を使用することもサポートします。