gpt4 book ai didi

linux - 在另一个比较中使用 bash 比较的结果

转载 作者:IT王子 更新时间:2023-10-29 01:26:20 25 4
gpt4 key购买 nike

我想在后续比较中使用比较结果。我正在尝试做类似的事情:

# $1 - expected result
# $2 - actual result
function print_result() {
if [[ [[ $1 -eq 0 ]] -eq [[ $2 -eq 0 ]] ]]; then # invalid
echo "Pass"
else
echo "Fail"
fi
}

我可以使用更详细的形式获得所需的行为:

function print_result() {
if [[ (($1 -eq 0) && ($2 -eq 0)) || (($1 -ne 0) && ($2 -ne 0)) ]]; then
echo "Pass"
else
echo "Fail"
fi
}

但似乎应该有更简单的方法?

最佳答案

您需要将比较运算符的结果生成为文本而不是状态返回的东西。那将是 arithmetic expansion : $((expression)) .

另请注意,bash 包含一个数字 conditional compound statement -- (( expr )) -- 这通常比非数值的 [[ ... ]] 更容易用于数值比较条件复合语句。

将它们放在一起,您正在寻找的是:

if (( $(($1==0)) == $(($2==0)) )); then

或者只是:

if (( ($1==0) == ($2==0) )); then

如果您只想知道 $1 和 $2 是都为零还是都非零,那么您可以使用 bool 值非 (!) 始终计算为 0 或 1 的事实。因此,以下更简单表达式是等效的(但请参阅下面的警告):

if ((!$1 == !$2)); then 

重要提示:如果您在脚本中使用它,它会正常工作,但在命令提示符下您需要在 ! 之后放置一个空格以避免它被解释为 history expansion角色(除非你关闭了历史扩展:如果你实际上不使用历史扩展,关闭它是个不错的主意。)

关于linux - 在另一个比较中使用 bash 比较的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31375356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com