bash命令行中的for循环

时间:2018-02-02 00:24:33

标签: bash

我在命令行遇到 for loops 时遇到问题。基本上他们似乎提示没有exec的新行。

  • $(for i in {1..5}; do echo $i; done)只是挂起,从不执行

  • echo $(for i in {1..5}; do echo $i; done)产生命令替换错误。

正在运行bash --norc。但是.bashrc的lint shellcheck没有显示任何问题。

使用strace bash ~/.bashrc进行调试并没有产生任何值得注意的内容。

接下来应该检查一下,让干净的终端正常工作?

由于

bash version 4.3.11

1 个答案:

答案 0 :(得分:1)

这是我在命令行输入这些片段时得到的结果:

prompt> $(for i in {1..5}; do echo $i; done)
1: command not found

prompt> echo $(for i in {1..5}; do echo $i; done)
1 2 3 4 5

在第一种情况下,语法本身是有效的,但由于您没有任何命令或变量赋值,bash只是执行命令替换,然后尝试解析命令替换的输出作为一个命令。这就像你做到了这一点:

prompt> 1 2 3 4 5
1: command not found

由于你只是暂停了这个命令而没有输出,所以必然会发生其他与bash本身无关的事情。

在第二种情况下,对我来说无论如何都有效。这些数字在一行中得到回应,因为你没有引用命令替换,所以新行只被视为分隔符,它基本上与:

相同
echo 1 2 3 4 5

如果你引用命令替换,你得到这个:

prompt> echo "$(for i in {1..5}; do echo $i; done)"
1
2
3
4
5

结论:你的循环语法是有效的,就像在命令替换中使用它一样。只是不要指望循环的输出被解释为有效的bash命令。也就是说,除非您的1实际上有一个名为PATH的可执行文件。