在bash中增加一个变量`i = 0; ls> $((i)); echo i = $i; `为
发布时间:2020-12-15 17:02:31 所属栏目:安全 来源:网络整理
导读:案例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 评论:结果是正确的
案例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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |