gpt4 book ai didi

bash - "[ $(command) ]"什么时候等于 "if command; then..."?

转载 作者:行者123 更新时间:2023-11-29 09:36:20 29 4
gpt4 key购买 nike

我是 answering a question并假设

if [ $(command) ]; then ...

总是等同于

if command; then ...

但是,我得到了a couple of counter examples :

$ [ $(true) ] && echo "yes" || echo "no"
no
$ if true; then echo "yes"; else echo "no"; fi
yes

和:

$ if echo "$xxxx"; then echo "yes"; else echo "no"; fi

yes
$ [ $(echo "$xxx") ] && echo "yes" || echo "no"
no

在这两种情况下,问题都在于 trueecho $xxxx(未设置变量)不返回任何内容,因此 [ ] 计算为False ( by definition in man test ),而 echo $xxxx 成功,因此其返回代码为 0,因此 if 条件的计算结果为 True。

但是,我想知道:我们什么时候可以假设这两个检查是等价的?这种假设是有风险的,还是在大多数情况下是可靠的?

最佳答案

两种说法完全不同。当你写

if command; then ...

您正在测试命令的退出代码。如果它为零,将执行该 block 。另一方面,当你写

if [ $(command) ]; then ...

您实际上是在测试命令的输出,而不是退出代码。

您链接的示例之所以有效,是因为 grep 仅在找到匹配项时才打印到标准输出。

关于bash - "[ $(command) ]"什么时候等于 "if command; then..."?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37049903/

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