シェルスクリプトでファイル名の拡張子を削除するにはどうすればいいですか? 質問する

シェルスクリプトでファイル名の拡張子を削除するにはどうすればいいですか? 質問する

次のコードの何が問題なのでしょうか?

name='$filename | cut -f1 -d'.''

そのままだと文字列リテラルが得られます$filename | cut -f1 -d'.'が、引用符を削除すると何も得られません。一方、次のように入力すると

"test.exe" | cut -f1 -d'.'

シェルで を実行すると、必要な出力が得られますtest。 に正しい値が割り当てられていることはすでにわかっています$filename。 拡張子なしのファイル名を変数に割り当てたいのです。

ベストアンサー1

パラメータ拡張を使用することもできます:

$ filename=foo.txt
$ echo "${filename%.*}"
foo

ファイル名だけではなくファイルパスがある場合は、まず を使って拡張子を含むファイル名だけを取得します。そうでない場合、パスにドットのみがある場合 (例:または)、パス内がトリミングされます。パスにドットがない場合でも、 が取得されます (例:パスが の場合)。basenamepath.to/myfile./myfilepath/to/myfilepath/to/myfile.txt

$ filepath=path.to/foo.txt
$ echo "${filepath%.*}"
path.to/foo
$ filename=$(basename $filepath)
$ echo $filename
foo.txt
$ echo "${filename%.*}"
foo

ファイル名がドットのみで始まる場合 (例.bashrc)、ファイル名全体が削除されることに注意してください。

おすすめ記事