1

私のスクリプトでは、文字列を取得し、文字列がある場合はその拡張子を出力しようとしています。つまり、基本的にはファイルのベース名を取得し、ピリオドの後に続くものをすべて出力します。

このようなことをするための構文は何ですか?

例えば

dotcutter.sh
file=testfile.jpg

スクリプトは.jpgを出力する必要があります

編集:

私は今私の問題を解決しました:

file=$(basename "$1" )
stub=${file%.*}
echo ${file#"$stub"}

これは私の議論をベースネームに減らします、ありがとう。

4

2 に答える 2

3
$ file=testfile.jpg
$ echo ${file##*.}
jpg
$ file=testfile.ext1.ext2
$ echo ${file##*.}
ext2
$ file=noextension
$ echo ${file##*.}
noextension

ファイルに拡張子がない場合は機能しないことに注意してください。それが重要な場合は、次の2段階のソリューションを試してください。

$ file=testfile.ext1.ext2
$ stub=${file%.*}
$ echo ${file#"$stub"}
.ext2

echoまたは、この正規表現ベースのものは、実際に拡張機能がある場合にのみ呼び出されます。(&&「ifthen」の省略形です。)

$ regex='(\.[^.]*)$'
$ file=testfile.ext1.ext2
$ [[ $file =~ $regex ]] && echo ${BASH_REMATCH[1]}
.ext2
$ file=noextension
$ [[ $file =~ $regex ]] && echo ${BASH_REMATCH[1]}

参照:

  • basename(1)
  • dirname(1)
  • Bash FAQ:パラメータ展開をどのように使用できますか?部分文字列を取得するにはどうすればよいですか?拡張子のないファイルを取得するにはどうすればよいですか、またはファイルの拡張子だけを取得するにはどうすればよいですか?]
于 2012-10-09T19:34:48.210 に答える
1

次のコードを試してください。

file=testfile.jpg
echo .${file#*.}

パラメータ展開を使用する

于 2012-10-09T19:33:41.323 に答える