あくまでも、ファイル名から拡張子を判断するだけ。
以下に、$filenameとして与えられたファイルが拡張子.gzを持つかどうかを確認するシェルスクリプトのサンプルを示す。
Caseを使うケース。
非常に素直。
#!/bin/sh
case "$filename" in
*\.gz)
echo "Found .gz suffix"
;;
*)
echo "Not a .gz suffix"
;;
esac
basenameを使うケース。
#!/bin/sh
# `basename $filename .gz` returns `basename $filename`
# *unless* it has a .gz suffix.
[ `basename $filename .gz` = `basename $filename` ] || {
echo $filename has a .gz suffix
}
そもそもbasenameは、与えられた文字列からディレクトリ名を削除し、ファイル名部分を抜き出すコマンド。
第二引数として拡張子を与えると、文字列からはその拡張子も削除される。
これを逆に利用している。
つまり、$filenameが.gzという拡張子をもって*いない*場合、`basename $filename .gz`の結果は、`basename $filename`と等しい。