我正在寫一個示例shell腳本,如果字符串不等於「sample」且字符串不包含特殊字符,我必須執行一些操作。我嘗試了下面的代碼,但我得到語法錯誤。這是正確的方式嗎?如果不是,那麼做什麼是正確的?Shell腳本來檢查字符串和特殊字符
#!/bin/bash
str='sudo'
if [ "$str" != "sample" ] && [[ "$str" != *['!'@#\$%^\&*()_+]* ]]
then
echo "Proceed"
else
echo "Stop"
fi
我得到的語法錯誤是這樣的:
bash-3.2$ ./test.sh
./test.sh: line 3: syntax error in conditional expression: unexpected token `('
./test.sh: line 3: syntax error near `&*()'
./test.sh: line 3: `if [ "$str" != "sample" ] || [[ "$str" != *['!'@#\$%^\&*()_+]* ]]'
如果出現語法錯誤,那麼您沒有使用'bash'運行腳本。這是完全有效的'bash'代碼。 – chepner
@chepner謝謝。請參閱更新內容 – chelulala
嗯,這看起來可能是3.2中的解析器錯誤。它肯定是固定在4.3;我不確定它可能早已修復多少,或者是否在發行說明中明確提及。轉義括號('\(\)')似乎可以在3.2和4.x中工作。 – chepner