使用带有循环和标准输出重定向的bash-c

使用带有循环和标准输出重定向的bash-c,bash,Bash,为什么以下命令的标准输出不同 命令1: for ((i=0; i<10; i=i+1)); do echo $i; done 因为为琐碎的for循环创建一个单独的my_script.sh文件有点麻烦,所以我希望通过使用“bash-c”实现同样的效果,但遇到了这个问题 谢谢你的建议。期待您的回复。 米沙 我需要做什么才能让command2打印与command1相同的内容 您需要修复此行: bash -c "for ((i=0; i<10; i=i+1)); do echo $i; d

为什么以下命令的标准输出不同

命令1:

for ((i=0; i<10; i=i+1)); do echo $i; done
因为为琐碎的for循环创建一个单独的my_script.sh文件有点麻烦,所以我希望通过使用“bash-c”实现同样的效果,但遇到了这个问题

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

我需要做什么才能让command2打印与command1相同的内容

您需要修复此行:

bash -c "for ((i=0; i<10; i=i+1)); do echo $i; done"
假设
i
包含值“10”

(当我第一次运行第二个脚本时,也就是在运行第一个脚本之前,它写出了10个空行,因为我没有定义
I
变量,所以它在空字符串中进行替换。)

我需要做什么才能让command2打印与command1相同的内容

您需要修复此行:

bash -c "for ((i=0; i<10; i=i+1)); do echo $i; done"
假设
i
包含值“10”


(当我第一次运行第二个脚本时,也就是在运行第一个脚本之前,它写出了10个空行,因为我没有定义
I
变量,所以它在空字符串中进行替换。)

或者您可以将双引号改为单引号。是的,两种方法都可以。任何让外壳按字面意思处理
$
的东西。
$i
当然是
10
,如果在命令1之后运行命令2。谢谢。使用\escape和使用单引号而不是双引号都可以解决问题。@misha:在StackOverflow中,“谢谢。这解决了我的问题”在答案的左侧用绿色勾号表示。偶尔会有一个向上的投票。或者你可以把双引号改为单引号。是的,两种方法都可以。任何让外壳按字面意思处理
$
的东西。
$i
当然是
10
,如果在命令1之后运行命令2。谢谢。使用\escape和使用单引号而不是双引号都可以解决问题。@misha:在StackOverflow中,“谢谢。这解决了我的问题”在答案的左侧用绿色勾号表示。偶尔有一次投票。
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"
for ((i=0; i<10; i=i+1)); do echo 10; done