bash 测试中的 OR 逻辑运算符
OR logical operator in bash test
测试似乎无法正常运行。为什么 ?
我需要一个脚本,它接受第一个参数,检查它是哪个字母并完成工作。如果字母是 a、b、c 或 d,它就退出,否则就正确。
letter=
[[ $letter != a || $letter != b || $letter != c || $letter != d ]] && echo exiting && exit 1
if [[ $letter == a ]]
then
echo correct
fi
让我们举一个更简单的例子: [[ $letter != a || $letter != b ]]
无论 letter
是什么,这两个测试中的一个为真。如果您选择 a
,则选择 $letter != b
。如果您选择 b
,则 $letter != a
。如果您选择任何其他字符,两者 都为真。
您需要 &&
:
[[ $letter != a && $letter != b && $letter != c && $letter !=d ]] && { echo exiting; exit 1; }.
或使用=
/==
并在测试后使用||
[[ $letter = a || $letter = b || $letter = c || $letter = d ]] || { echo exiting; exit 1; }
(在这两种情况下,更喜欢显式的 if
语句而不是使用 &&
或 ||
:
if [[ $letter != a && $letter != b ... ]]; then
echo exiting >&2 # use standard error, not standard output
exit 1
fi
if ! [[ $letter = a || $letter = b ... ]]; then
echo exiting >&2 # use standard error, not standard output
exit 1
fi
)
不过,更简单的方法是使用 case
语句:
case $letter in
a|b|c|d) : ;; # do nothing
*) echo exiting
exit 1
;;
esac
测试似乎无法正常运行。为什么 ? 我需要一个脚本,它接受第一个参数,检查它是哪个字母并完成工作。如果字母是 a、b、c 或 d,它就退出,否则就正确。
letter=
[[ $letter != a || $letter != b || $letter != c || $letter != d ]] && echo exiting && exit 1
if [[ $letter == a ]]
then
echo correct
fi
让我们举一个更简单的例子: [[ $letter != a || $letter != b ]]
无论 letter
是什么,这两个测试中的一个为真。如果您选择 a
,则选择 $letter != b
。如果您选择 b
,则 $letter != a
。如果您选择任何其他字符,两者 都为真。
您需要 &&
:
[[ $letter != a && $letter != b && $letter != c && $letter !=d ]] && { echo exiting; exit 1; }.
或使用=
/==
并在测试后使用||
[[ $letter = a || $letter = b || $letter = c || $letter = d ]] || { echo exiting; exit 1; }
(在这两种情况下,更喜欢显式的 if
语句而不是使用 &&
或 ||
:
if [[ $letter != a && $letter != b ... ]]; then
echo exiting >&2 # use standard error, not standard output
exit 1
fi
if ! [[ $letter = a || $letter = b ... ]]; then
echo exiting >&2 # use standard error, not standard output
exit 1
fi
)
不过,更简单的方法是使用 case
语句:
case $letter in
a|b|c|d) : ;; # do nothing
*) echo exiting
exit 1
;;
esac