我尝试在“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"'