次のコードの何が問題なのでしょうか?
name='$filename | cut -f1 -d'.''
そのままだと文字列リテラルが得られます$filename | cut -f1 -d'.'
が、引用符を削除すると何も得られません。一方、次のように入力すると
"test.exe" | cut -f1 -d'.'
シェルで を実行すると、必要な出力が得られますtest
。 に正しい値が割り当てられていることはすでにわかっています$filename
。 拡張子なしのファイル名を変数に割り当てたいのです。
ベストアンサー1
パラメータ拡張を使用することもできます:
$ filename=foo.txt
$ echo "${filename%.*}"
foo
ファイル名だけではなくファイルパスがある場合は、まず を使って拡張子を含むファイル名だけを取得します。そうでない場合、パスにドットのみがある場合 (例:または)、パス内がトリミングされます。パスにドットがない場合でも、 が取得されます (例:パスが の場合)。basename
path.to/myfile
./myfile
path/to/myfile
path/to/myfile.txt
$ filepath=path.to/foo.txt
$ echo "${filepath%.*}"
path.to/foo
$ filename=$(basename $filepath)
$ echo $filename
foo.txt
$ echo "${filename%.*}"
foo
ファイル名がドットのみで始まる場合 (例.bashrc
)、ファイル名全体が削除されることに注意してください。