我在命令行遇到 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
答案 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
的可执行文件。