首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将bash -c与循环和标准输出重定向结合使用

问将bash -c与循环和标准输出重定向结合使用
EN

Stack Overflow用户
提问于 2010-11-14 13:45:53
回答 1查看 2.8K关注 0票数 2

为什么以下命令的标准输出会有所不同?

command1:

代码语言:javascript
复制
for ((i=0; i<10; i=i+1)); do echo $i; done

command2:

代码语言:javascript
复制
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循环。

然后,我可以使用以下命令获取输出:

代码语言:javascript
复制
bash my_script.sh > results.txt

因为为琐碎的for循环创建一个单独的my_script.sh文件有点麻烦,所以我希望通过使用"bash -c“来实现同样的目的,但是遇到了这个问题。

谢谢你的建议。期待您的回复。

Misha

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-14 13:50:53

我需要做什么才能让command2打印出与command1相同的东西?

您需要修复这一行:

代码语言:javascript
复制
bash -c "for ((i=0; i<10; i=i+1)); do echo $i; done"

换句话说:

代码语言:javascript
复制
bash -c "for ((i=0; i<10; i=i+1)); do echo \$i; done"

实际情况是,运行$i的shell正在解释bash序列,并且在将其传递给要执行的新bash实例之前,它将自己的i变量替换到字符串中。因此,当新的bash看到该字符串时,它是:

代码语言:javascript
复制
for ((i=0; i<10; i=i+1)); do echo 10; done

假设i包含值"10“。

(当我第一次运行第二个脚本时,它写出了10个空行,因为我没有定义i变量,所以它替换为空字符串。)

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4176347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档