'sh -c' 中的变量定义

'sh -c' 中的变量定义

我尝试在“sh -c”命令字符串中定义一个变量:

sh -c "TMP=??; echo $TMP;"

没有打印任何内容。

为什么我不能在“sh -c”字符串中定义变量?

答案1

sh -c 'TMP=??; echo $TMP;'

当使用双引号时,在构建命令行时会发生参数扩展,即 shell 看不到

TMP=??; echo $TMP;

作为它的参数但是

TMP=??; echo ;

if$TMP在调用 shell 环境中为空。

答案2

sh -c 'TMP=??; echo "$TMP"'

双倍的代码周围有引号sh -c$TMP由交互式 shell 扩展代码sh -c执行。带单引号,$TMP将在 shell 内展开sh。 (我还正确引用了$TMP的变量扩展echo)。

单引号可以保护字符串免受变量扩展的影响。

如果您不希望??将其视为sh -c脚本内的文件名通配模式,请使用

sh -c 'TMP="??"; echo "$TMP"'

相关内容