
if [ ! $var = " *.awk " ] ; then
echo "$var contains awk file"
fi
これは私が持っているものですが、それを実行してファイル名を入力すると、.awk
awkファイルが含まれていると表示されます
答え1
ではbash
、グロビングテストを実行するには、
if [[ $var == *.awk ]]; then
echo '$var ends with ".awk"'
else
echo '$var does not end with ".awk"'
fi
二重の角括弧と等号に注意してください。
bash
このようなテストを実行する標準的な方法もサポートしています。
case $var in
*.awk) echo '$var ends with ".awk"' ;;
*) echo '$var does not end with ".awk"' ;;
esac
どちらの場合も、パターンを*.awk
引用符で囲むことはできないことに注意してください。パターンを引用符で囲むと、グロブ パターン マッチではなく、文字列の比較になります。
テストが常に成功するように見える理由は 2 つあります。
- おそらく決して一致しないリテラル文字列
*.awk
(両側にスペースを含む)に対してテストし、 - テストを否定するには を使用します
!
。