为什么以下命令的标准输出会有所不同?
command1:
for ((i=0; i<10; i=i+1)); do echo $i; donecommand2:
bash -c "for ((i=0; i<10; i=i+1)); do echo $i; done"正如预期的那样,command1在单独的行上打印整数1到10。command2在每行打印10个字符。
我需要做什么才能让command2打印出与command1相同的东西?
说来话长:
我经常需要在大量文件上运行可执行文件,并捕获整个过程的输出。我在一个名为my_script.sh的单独文件中使用了一个类似于command1的for循环。
然后,我可以使用以下命令获取输出:
bash my_script.sh > results.txt因为为琐碎的for循环创建一个单独的my_script.sh文件有点麻烦,所以我希望通过使用"bash -c“来实现同样的目的,但是遇到了这个问题。
谢谢你的建议。期待您的回复。
Misha
发布于 2010-11-14 13:50:53
我需要做什么才能让command2打印出与command1相同的东西?
您需要修复这一行:
bash -c "for ((i=0; i<10; i=i+1)); do echo $i; done"换句话说:
bash -c "for ((i=0; i<10; i=i+1)); do echo \$i; done"实际情况是,运行$i的shell正在解释bash序列,并且在将其传递给要执行的新bash实例之前,它将自己的i变量替换到字符串中。因此,当新的bash看到该字符串时,它是:
for ((i=0; i<10; i=i+1)); do echo 10; done假设i包含值"10“。
(当我第一次运行第二个脚本时,它写出了10个空行,因为我没有定义i变量,所以它替换为空字符串。)
https://stackoverflow.com/questions/4176347
复制相似问题