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

时间:2014-11-21 10:09:03

标签: bash shell

案例0

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

创建一个文件:1

和输出:

I = 0

评论:为什么i = 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?

是否是一个错误?

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

你可以尝试打击。

1 个答案:

答案 0 :(得分:4)

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