我正在写一个示例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