シェルスクリプトのファイル入力パスからファイル名を取得する

シェルスクリプトのファイル入力パスからファイル名を取得する

重複の可能性:
文字列からファイル拡張子を削除する最良の方法は何ですか?

次のようなファイルがあるとしましょう。script.sh

シェルでは、私は次のように入力します。

script.sh ../folder/file.py

そのファイルから私はecho $1それが出力されることを知っています../folder/file.py

しかし、拡張子なしでファイル名だけを取得する方法はありますか… file

ベストアンサー1

BASHにはたくさんあります文字列演算子ここで使用したいかもしれませんが、1つのステートメントでこれを行う方法がわからないので、2つのステートメントまたはサブシェルを使用できます。

echo `basename ${1%.py}`

またはより一般的に、

echo `basename ${1%.*}`

または一時変数を使用します。

FILE=${1##*/}
echo ${FILE%.*}

サブシェルを使う限り、sedそれもうまくいくと思います。

echo `echo $1 | sed 's/.*\/\([^/]*\)\(\.[^./]*\)\?/\1/'`

これは少し見苦しい表現ですが、入力についていくつかの仮定をすれば整理できます。

おすすめ記事