【发布时间】:2016-07-15 00:04:18
【问题描述】:
我正在编写一个示例 shell 脚本,如果字符串不等于“sample”并且字符串不包含特殊字符,我必须执行一些操作。我尝试了下面的代码,但出现语法错误。这是正确的做法吗?如果没有,正确的做法是什么?
#!/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 谢谢。请查看更新内容
-
啊,这看起来可能是 3.2 中的解析器错误。它肯定在 4.3 中修复;我不确定它可能提前多久被修复,或者它是否在发行说明中明确提及。转义括号 (
\(\)) 似乎适用于 3.2 和 4.x。