bashの第3バージョン(2004年頃)以降に存在するbashの「条件付き正規表現」構造を使用したいと思います。これは次のようになるはずです:
if [[ $string =~ $regexp ]]; then
#do smthg
else
#do somthg else
fi
したがって、この構造に従った私のコードは次のとおりです。その役割は、SSIDに含まれる名前がiwdevwlan0リンクからの出力に含まれているかどうかを確認することです。
if [[ $(iw dev wlan0 link) =~ $SSID+ ]]; then
#do sthming
else
echo "wrong network"
fi
解読できない何らかの理由で、このステートメントをbashシェルに直接実行すると、このステートメントは非常にうまく機能します。
if [[ $(iw dev wlan0 link) =~ $SSID+ ]]; then echo found; else echo not found; fi
しかし、含まれているスクリプト内で実行すると、吐き出されます。
scripts/ssidchecker.sh: 22: [[: not found
22は「fi」キーワードの行です。最も奇妙なことは、「else」ステートメントに含まれるコードを常に実行することです。
「見つからない」とは、正規表現がその文字列に何も見つからなかったことを示すことを意味しますか?それは本当のエラーメッセージですか?