gpt4 book ai didi

bash - Bash在处理[[

转载 作者:行者123 更新时间:2023-12-03 08:22:06 25 4
gpt4 key购买 nike

我试图了解Bash算法的逻辑。

当我尝试此操作时,它显示“a”:

a=a;[ $a == "a" ] && echo $a

到现在为止还挺好。然后,我尝试了以下操作,并再次打印了“a”:
a=a;[[ $a == "a" ]] && echo $a

现在,我通过算术比较引入了一个错误:
a=abc;[ $a -eq "abc" ] && echo $a

我收到一条有意义的错误消息:
-bash: [: abc: integer expression expected

然后,我尝试使用双括号进行此操作,但没有错误,但出现了“abc”:
a=abc;[[ $a -eq "abc" ]] && echo $a

我可以解释一下(bash正在努力适应),但是后来我得到了一些令我困惑的东西。如果这样做,则会收到有关递归的错误消息:
a=a;[[ $a -eq "a" ]] && echo $a

-bash: [[: a: expression recursion level exceeded (error token is "a")

如果我使用单括号,则没有递归,而是一个合理的错误“预期为整数表达式”:
a=a;[ $a -eq "a" ] && echo $a
-bash: [: abc: integer expression expected

真奇怪在带有双括号的“递归”情况下,Bash打算做什么?我说的是:
a=a;[[ $a -eq "a" ]] && echo $a
-bash: [[: a: expression recursion level exceeded (error token is "a")

最佳答案

它试图将a强制转换为数字形式。它通过将其内容视为要取消引用的变量名称来实现;当此结果是循环时,您将收到“超出递归级别”错误。

从而:

a=b
b=10
[[ $a -eq 10 ]]

...是真的。

关于bash - Bash在处理[[,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53808027/

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