1. ホーム
  2. バッシュ

[解決済み】シェルスクリプトでファイル名の拡張子を削除するには?

2022-04-09 12:37:34

質問

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

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

そのままでは、リテラル文字列 $filename | cut -f1 -d'.' しかし、引用符を削除すると、何も表示されません。一方、次のように入力すると

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

をシェルで実行すると、私が望む出力が得られます。 test . 私はすでに $filename は正しい値が割り当てられています。私がしたいのは、拡張子を除いたファイル名を変数に代入することです。

解決方法は?

を使用する必要があります。 コマンド置換 構文 $(command) script/commandでコマンドを実行したい場合。

ですから、あなたの行は次のようになります。

name=$(echo "$filename" | cut -f 1 -d '.')

コードの説明です。

  1. echo 変数の値を取得する $filename を作成し、標準出力に送ります。
  2. 次に、出力を取得し、それをパイプで cut コマンド
  3. cut は文字列をセグメントに分割するためのデリミタ(セパレータともいう)として .を使用し -f どのセグメントを出力するかを選択します。
  4. 次に $() コマンド置換は出力を取得し、その値を返します。
  5. という変数に代入されます。 name

これは、変数の最初のピリオドまでの部分を与えることに注意してください。 . :

$ filename=hello.world
$ echo "$filename" | cut -f 1 -d '.'
hello
$ filename=hello.hello.hello
$ echo "$filename" | cut -f 1 -d '.'
hello
$ filename=hello
$ echo "$filename" | cut -f 1 -d '.'
hello