最初のbashスクリプトを修正しようとしています。ある時点で、ファイル名が$1
としてスクリプトに渡されます。拡張子なしでファイル名を抽出する必要があります。
現在、すべての拡張子が3文字であると想定しているため、最後の4文字を削除してファイル名を取得します。
a="${1:0:-4}"
しかし、Windowsの%~n1
のように、3文字を超える拡張機能を使用できるようにする必要があります。
引数から拡張子なしでファイル名を抽出する方法はありますか?
これをbashで行う通常の方法は、パラメーター展開を使用することです。 ( bash のマニュアルページを参照して、「Parameter Expansion」を検索してください。)
a=${1%.*}
%
は、可能な限り最短一致を使用して、右から(.*
)に続くパターンに一致するすべてのものをパラメーター$1
から削除することを示します。この場合、式を二重引用符( ")で囲む必要はありません。
拡張子がわかっている場合は、 basename を使用できます
$ basename /home/jsmith/base.wiki .wiki
base
ベース名を使用しないBashのワンライナー:
$ s=/the/path/foo.txt
$ echo "$(b=${s##*/}; echo ${b%.*})"
foo