内联bash脚本变量

Dan*_*iel 10 bash

不可否认,我是一个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 手册页的替代方法,请查看这里 http://pubs.opengroup.org/onlinepubs/009695399/ 在左上角框架的“选择卷”下,选择“外壳和实用程序”,然后在下面的框架中那个,选择“2. Shell 命令语言”。这是 Unix 兼容的 shell 应该如何工作的规范。详细描述了shell代码的处理,并给出了类似Yacc的语法等。 (2认同)

mat*_*att 7

不是核心问题的答案,但如果有人希望以一种(主观上)比以下更优雅的方式内联执行此操作bash -c

( export MY_FLAG="Hello"; echo "$MY_FLAG" )
Run Code Online (Sandbox Code Playgroud)

语法更好,没有转义字符等。