不可否认,我是一个bash新手.我总是希望为我的shell脚本目的而使用Python.但是,我正试图让自己学习一些bash.我很好奇为什么以下代码不起作用.
sh -c "F=\"123\"; echo $F"
Run Code Online (Sandbox Code Playgroud)
lar*_*sks 15
它不起作用,因为双引号字符串中的变量扩展在调用命令之前发生.也就是说,如果我输入:
echo "$HOME"
Run Code Online (Sandbox Code Playgroud)
shell将其转换为:
echo "/home/lars"
Run Code Online (Sandbox Code Playgroud)
在实际调用echo命令之前.同样,如果您输入:
sh -c "F=\"123\"; echo $F"
Run Code Online (Sandbox Code Playgroud)
这变成了:
sh -c "F=\"123\"; echo"
Run Code Online (Sandbox Code Playgroud)
在调用sh命令之前.您可以使用单引号来禁止变量扩展,例如:
sh -c 'F="123"; echo $F'
Run Code Online (Sandbox Code Playgroud)
你也可以$用反斜杠来逃避:
sh -c "F=\"123\"; echo \$F"
Run Code Online (Sandbox Code Playgroud)
不是核心问题的答案,但如果有人希望以一种(主观上)比以下更优雅的方式内联执行此操作bash -c:
( export MY_FLAG="Hello"; echo "$MY_FLAG" )
Run Code Online (Sandbox Code Playgroud)
语法更好,没有转义字符等。