BASH:位置 $1 的 OR 运算符

fac*_*ess 0 linux bash

我遇到了一些问题,其中 OR 运算符不能以 1 美元的价格工作。例如:

if [[ "$1" != '1' || '2' ]]
        then
               echo "BAD"
        else
               echo "OK"
        fi
Run Code Online (Sandbox Code Playgroud)

无论 1 美元是多少,当我运行此测试时,总是会出现 BAD。

我如何才能将 1 美元绑定为 1 或 2?

Sté*_*las 5

使用标准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