逻辑运算符的工作原理
How logical operators works
我在下面尝试过,但没有用。抛出一些错误。
Exp1 或 expr2 应首先评估,结果应使用 expr3 ( &&)
评估
if [ "$val1" == "$val2" || "$val1" == "$val3" ] && [ "$val4" > "$val5" ]
then
echo "success"
elif [ "$val1" == "$val2" || "$val1" == "$val3" ] && [ "$val4" < "$val5" ]
then
echo "fail"
else
echo "no result"
fi
fi
我按照建议尝试了,它抛出错误
./temp.ksh[11]: 03/20/1996: not found [No such file or directory]
Fyi- 该日期是 val1 值。
根据 shell 或版本,您可能会看到不同的结果,例如:sh vs bash vs ash。
一个例子是一些 bash 从 [ [(带有分隔符 space)产生错误,而 [[(没有分隔符 space)被接受。请注意 [ ] 与 [[ ]] 表达式中有不同的语义。
尝试从您的 || 中删除外部 space 分隔的 [ 和 ]表达。还要检查运算符优先级的文档以满足或确认您的需求。
另一个问题是重定向 < 和 > 的使用。检查当前目录中是否存在以 $val4 和 $val5 中的值命名的文件。切换到 -gt 和 -lt 进行比较。
同时为了避免意外:当使用 -gt 和 -lt 时,检查当操作数为空或非数字时会发生什么。
=======
5 月 24 日更新:
原文post没有指定shell;现在使用 ksh,运算符组合有问题。看起来您需要将 -o 和 -a 与 [ ] 表达式或 || 一起使用和 && 与 [[ ]] 表达式。切换到 [[ ]] 并替换 > 和 < 后,此版本适用于 jdoodle.com :
if [[ "$val1" == "$val2" || "$val1" == "$val3" ]] && [[ "$val4" -gt "$val5" ]]; then
echo "success"
elif [[ "$val1" == "$val2" || "$val1" == "$val3" ]] && [[ "$val4" -lt "$val5" ]]; then
echo "fail"
else
echo "no result"
fi
我在下面尝试过,但没有用。抛出一些错误。 Exp1 或 expr2 应首先评估,结果应使用 expr3 ( &&)
评估if [ "$val1" == "$val2" || "$val1" == "$val3" ] && [ "$val4" > "$val5" ]
then
echo "success"
elif [ "$val1" == "$val2" || "$val1" == "$val3" ] && [ "$val4" < "$val5" ]
then
echo "fail"
else
echo "no result"
fi
fi
我按照建议尝试了,它抛出错误
./temp.ksh[11]: 03/20/1996: not found [No such file or directory]
Fyi- 该日期是 val1 值。
根据 shell 或版本,您可能会看到不同的结果,例如:sh vs bash vs ash。 一个例子是一些 bash 从 [ [(带有分隔符 space)产生错误,而 [[(没有分隔符 space)被接受。请注意 [ ] 与 [[ ]] 表达式中有不同的语义。
尝试从您的 || 中删除外部 space 分隔的 [ 和 ]表达。还要检查运算符优先级的文档以满足或确认您的需求。
另一个问题是重定向 < 和 > 的使用。检查当前目录中是否存在以 $val4 和 $val5 中的值命名的文件。切换到 -gt 和 -lt 进行比较。
同时为了避免意外:当使用 -gt 和 -lt 时,检查当操作数为空或非数字时会发生什么。
=======
5 月 24 日更新:
原文post没有指定shell;现在使用 ksh,运算符组合有问题。看起来您需要将 -o 和 -a 与 [ ] 表达式或 || 一起使用和 && 与 [[ ]] 表达式。切换到 [[ ]] 并替换 > 和 < 后,此版本适用于 jdoodle.com :
if [[ "$val1" == "$val2" || "$val1" == "$val3" ]] && [[ "$val4" -gt "$val5" ]]; then
echo "success"
elif [[ "$val1" == "$val2" || "$val1" == "$val3" ]] && [[ "$val4" -lt "$val5" ]]; then
echo "fail"
else
echo "no result"
fi