LuM*_*uMa 2 linux bash command-line echo
我有一个自动设置脚本,在创建新用户时执行。它运行这行代码来设置 golang 环境:echo "export PATH="$PATH:$GOPATH/bin"" >> ~/.profile
但这会在写入文件之前扩展所有环境变量。有没有办法export PATH="$PATH:$GOPATH/bin"从命令行写入文件而不扩展环境变量?
尝试:
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 如何允许您通过将字符串(不带引号、单引号或双引号)直接并排放置来组成更大的字符串(连接字符串) 。