我遇到了一些问题,其中 OR 运算符不能以 1 美元的价格工作。例如:
if [[ "$1" != '1' || '2' ]]
then
echo "BAD"
else
echo "OK"
fi
Run Code Online (Sandbox Code Playgroud)
无论 1 美元是多少,当我运行此测试时,总是会出现 BAD。
我如何才能将 1 美元绑定为 1 或 2?
使用标准sh语法(因此不仅可以被bash所有其他 POSIX 兼容 shell识别):
case $1 in
(1 | 2) echo OK;;
(*) echo BAD;;
esac
Run Code Online (Sandbox Code Playgroud)
或者:
if [ "$1" = 1 ] || [ "$1" = 2 ]; then
echo OK
else
echo BAD
fi
Run Code Online (Sandbox Code Playgroud)
(请注意,这是字符串的字节到字节比较。01, 1e0, 1.0, 20/20, 0x1 也将被视为 BAD,即使在数字上它们可以被视为与 相同1)。
请注意,的构造中的=/!=运算符(从 中复制)实际上是模式匹配运算符而不是相等运算符,因此在您想要匹配单个字符的这种特殊情况下,您也可以像在标准语法中那样使用。bash[[...]]ksh[[ $1 != [12] ]]case $1 in ([12])sh