bash -c" 的引号本身仅用于包含和区分其中其他命令的引号吗?

bash -c" 的引号本身仅用于包含和区分其中其他命令的引号吗?

更新:我刚刚意识到我错了,但我不知道如何纠正。

例如,bash -c " echo "$S" "bash -c ' echo "$S" '会得到完全不同的输出。但我目前的知识还不足以得出正确的结论。



标题可能听起来有点令人困惑,

我的意思是,例如,默认情况下bash -c ' echo " smth " '

如果echo需要单引号'供其自身使用,echo ' #!$smth '

然后bash -c将不得不切换到双引号",以不同的echo单引号

所以bash -c " echo ' #!$smth ' "

bash -c无论单引号还是双引号,都没有区别。

我的理解是否正确,或者请随时纠正我。

谢谢。

答案1

双引号或不带引号的变量(例如 $S 或“$S”)在当前 shell 中展开。当您单引号字符串时,它会按字面意思(减去单引号)传递给子进程。在你的例子中你有

...
---> parent-shell
------> child-shell (bash -c)
------> echo command executed in child shell.

在第一个示例中, $S 在父 shell 中展开。在第二个示例中,$S 在未定义的子 shell 中扩展为 null。导出 S 变量允许将其传递给子 shell。例子:

[me] S=foo
[me] bash -c " echo "$S" "
foo
[me] bash -c ' echo "$S" '

[me] export S
[me] bash -c ' echo "$S" '
foo
[me] 

相关内容