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
テストします。 - テストを無効にするために使用されます
!
。