![这是在 bash 上的“else”语句内创建数组的正确方法吗?](https://linux22.com/image/208933/%E8%BF%99%E6%98%AF%E5%9C%A8%20bash%20%E4%B8%8A%E7%9A%84%E2%80%9Celse%E2%80%9D%E8%AF%AD%E5%8F%A5%E5%86%85%E5%88%9B%E5%BB%BA%E6%95%B0%E7%BB%84%E7%9A%84%E6%AD%A3%E7%A1%AE%E6%96%B9%E6%B3%95%E5%90%97%EF%BC%9F.png)
有谁知道这是否正确?这是在 bash 上的“else”语句内创建数组的正确方法吗?
else [[ $SELECTION != "a|b|c|x" ]]
答案1
我假设你的目的是测试$SELECTION
是否不是 a
、b
、c
或x
,并且您打算对语句的“else-if”分支执行此操作if
。
您的测试将测试是否$SELECTION
不是文字字符串a|b|c|x
。如果您打算在“else-if”分支(编写为 )中使用测试,则语法不正确elif [[ ... ]]
。
如果您想测试是否$SELECTION
是除a
, b
, c
, 或之外的其他内容x
,那么您可以使用
if ...; then
...
else
case $SELECTION in
a|b|c|x)
# do nothing here
;;
*)
echo 'it is not a, b, c, or x'
esac
fi
这使用 POSIX 标准case
语句,如果给定值与任何|
- 分隔模式匹配,则echo
该语句不执行任何操作;如果不匹配,则调用。
或者,
if ...; then
...
elif [[ $SELECTION != @(a|b|c|x) ]]; then
echo 'it is not a, b, c, or x'
fi
|
这使用了扩展的通配模式,它匹配由inside分隔的任何一个模式@(...)
。
或者,摆脱尴尬的!=
测试:
if ...; then
...
elif [[ $SELECTION == !(a|b|c|x) ]]; then
echo 'it is not a, b, c, or x'
fi
请注意,该模式必须不带引号。测试是否在elif
分支中进行与测试本身无关。
请参阅手册的“模式匹配”部分bash
。