我可以阻止 echo 扩展环境变量吗?

LuM*_*uMa 2 linux bash command-line echo

我有一个自动设置脚本,在创建新用户时执行。它运行这行代码来设置 golang 环境:echo "export PATH="$PATH:$GOPATH/bin"" >> ~/.profile

但这会在写入文件之前扩展所有环境变量。有没有办法export PATH="$PATH:$GOPATH/bin"从命令行写入文件而不扩展环境变量?

mkl*_*nt0 5

尝试:

echo 'export PATH="$PATH:$GOPATH/bin"' >> ~/.profile
Run Code Online (Sandbox Code Playgroud)

类似 POSIX 的 shell(例如 )中的单引号bash字符串将其内容视为文字,这正是您想要的。

此处使用双引号字符串的唯一原因是有选择预先扩展变量引用- 这不适用于您的情况。

也就是说,这是一个例子:

$ echo "Honey, I'm \"$USER\" and I'm \$HOME."
Honey, I'm "jdoe" and I'm $HOME.
Run Code Online (Sandbox Code Playgroud)

反斜杠转义用于转义应被视为文字的"嵌入实例。$


至于你尝试过的:

"export PATH="$PATH:$GOPATH/bin""
Run Code Online (Sandbox Code Playgroud)

实际上是一个字符串连接,由3 个独立的字符串组成:

  • "export PATH=",作为一个双引号字符串,恰好包含$前缀插值元素,它扩展为文字export PATH=
  • $PATH:$GOPATH/bin,作为不带引号的字符串,会受到额外的shell 扩展 的影响,这不仅涉及扩展变量$PATH及其$GOPATH各自的值,而且还应用分词和路径名扩展(通配符)。
  • "",相当于字符串并且被有效地忽略。

请注意类似 POSIX 的 shell 如何允许您通过将字符串(不带引号、单引号或双引号)直接并排放置来组成更大的字符串(连接字符串) 。

  • Linux 教程的[章节](http://www.linuxcommand.org/lc3_lts0080.php) 提供了详细的示例,很好地解决了这个问题,也许值得一看。 (2认同)