Bash脚本IF语句使用AND逻辑运算符-a运行报错问题求助
问题原因
- 你使用的
[[ ]]是Bash专属的复合条件表达式,内部不支持-a作为逻辑与运算符,-a仅适用于传统的test/[ ]条件语句,[[ ]]中要实现逻辑与需要用&&运算符。 [[ ]]本身已经替代了test命令的功能,你在条件内部额外写test属于语法错误,不需要重复声明。- 额外补充:
=~是正则匹配运算符,如果你给右侧匹配规则加了双引号,Bash 3.2及以上版本会将其识别为字面字符串匹配而非正则规则;且正则中的.代表匹配任意字符,如果你要匹配字面的.com需要加转义符\。
正确写法
if [[ "$1" =~ \.com && "$#" -eq 1 ]] then echo "olalá" fi
如果需要严格匹配$1以.com结尾,可将正则规则调整为\.com$。
如果你更习惯使用传统[ ]语法配合-a,可以写成如下形式(传统[ ]不支持正则匹配,所以这里用子串截取判断后缀):
if [ "${1: -4}" = ".com" -a "$#" -eq 1 ] then echo "olalá" fi
内容的提问来源于stack exchange,提问作者Yo Juancho
相关产品推荐
相关产品推荐

