我试图在 'sh -c' 命令字符串中定义一个变量:
sh -c "TMP=??; echo $TMP;"
Run Code Online (Sandbox Code Playgroud)
什么都没打印。
为什么我不能在 'sh -c' 字符串中定义变量?
Hau*_*ing 13
sh -c 'TMP=??; echo $TMP;'
Run Code Online (Sandbox Code Playgroud)
当使用双引号时,参数扩展发生在命令行构建时,即 shell 看不到
TMP=??; echo $TMP;
Run Code Online (Sandbox Code Playgroud)
作为它的参数,但是
TMP=??; echo ;
Run Code Online (Sandbox Code Playgroud)
if$TMP
在调用 shell 环境中为空。
sh -c 'TMP=??; echo "$TMP"'
Run Code Online (Sandbox Code Playgroud)
在代码周围使用双引号sh -c
,在代码执行之前$TMP
由交互式 shell 展开。带单引号,会在shell里面展开。(我还正确引用了 的变量扩展)。sh -c
$TMP
sh
$TMP
echo
单引号保护字符串不受变量扩展的影响。
如果您不打算将??
其视为sh -c
脚本内的文件名通配模式,请使用
sh -c 'TMP="??"; echo "$TMP"'
Run Code Online (Sandbox Code Playgroud)