gpt4 book ai didi

bash - 在 bash ` i=0; ls>$((++i)); echo i=$i; ` 中增加一个变量,为什么结果是 i=0

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

案例 0

i=0; ls > $((++i)); echo i=$i

创建一个文件:1

和输出:

我=0

评论:为什么 i=0 ?

案例一

i=0; ls $((++i)); echo i=$i

输出:

1

我=1

评论:结果正确

案例2

i=0; echo > $((++i)); echo i=$i

创建一个文件:1

和输出:

我=1

评论:结果正确

案例三

i=0; echo 1 | grep $((++i)); echo i=$i

输出:

1

我=0

评论:可能是案例 3 <=> 案例 0?

案例4

i=0; command ls > $((++i)); echo i=$i

创建一个文件:1

和输出:

我=1

评论:为什么与 case 0 不同?

案例5

i=0; { ls; } > $((++i)); echo i=$i

创建一个文件:1

和输出:

我=1

评论:这个案例来自 gniourf_gniourf

更多案例:

i=0; ( echo ) > $((++i)); echo i=$i   #i=0

i=0; { ls > $((++i)); }; echo i=$i #i=0

我很困惑,为什么在 case 0 中 i=0 ?

是否是bug?

我的 bash 版本:GNU bash,版本 3.2.25(1)-release (i686-redhat-linux-gnu)

您可以在 bash 中尝试。

最佳答案

echols的区别在于ls是一个外部命令/usr/bin/ls ,而 echo 是一个 shell 内置的。尝试用 /usr/bin/echo 替换它(如果它存在于您的系统上)。您将获得相同的行为 - 似乎重定向发生在运行命令的子 shell 中。

比较:

$ i=0; /usr/bin/echo > $( ((++i)); echo inside $i>&2; echo $i ) ; echo i=$i
inside 1
i=0

关于bash - 在 bash ` i=0; ls>$((++i)); echo i=$i; ` 中增加一个变量,为什么结果是 i=0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27058814/

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