微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

创建一个文件:1

输出

I = 0

评论:为什么我= 0?

情况1

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

输出

1

I = 1

评论:结果是正确的

案例2

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

创建一个文件:1

输出

I = 1

评论:结果是正确的

案例3

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

输出

1

I = 0

评论:也许案例3< =>案例0?

案例4

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

创建一个文件:1

输出

I = 1

评论:为什么差异与案例0?

案例5

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

创建一个文件:1

输出

I = 1

评论:这个案例来自gnIoUrf_gnIoUrf

更多案例:

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

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

我很困惑,为什么在0的情况下i = 0?

是不是一个bug?

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

你可以试试你的bash.

echo和ls之间的区别在于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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐