'sh -c' 中的变量定义

Gwa*_*Lee 7 shell variable

我试图在 '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"'` (6认同)

Kus*_*nda 9

sh -c 'TMP=??; echo "$TMP"'
Run Code Online (Sandbox Code Playgroud)

在代码周围使用引号sh -c,在代码执行之前$TMP由交互式 shell 展开。带单引号,会在shell里面展开。(我还正确引用了 的变量扩展)。sh -c$TMPsh$TMPecho

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

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

sh -c 'TMP="??"; echo "$TMP"'
Run Code Online (Sandbox Code Playgroud)