我有一个自动设置脚本,在创建新用户时执行。它运行这行代码来设置golang环境:echo "export PATH="$PATH:$GOPATH/bin"" >> ~/.profile
但是这会在写入文件之前扩展所有环境变量。有没有办法在不扩展环境变量的情况下从命令行将export PATH="$PATH:$GOPATH/bin"
写入文件?
答案 0 :(得分:4)
尝试:
echo 'export PATH="$PATH:$GOPATH/bin"' >> ~/.profile
类似POSIX的shell中的单引号字符串(例如bash
)将其内容视为 literals ,这就是您想要的。
在这里使用双引号字符串的唯一原因是选择性扩展变量引用预先 - 这不适用在你的情况下。
那就是说,这是一个例子:
$ echo "Honey, I'm \"$USER\" and I'm \$HOME."
Honey, I'm "jdoe" and I'm $HOME.
反斜杠转义用于转义应被视为文字的嵌入式"
和$
实例。
至于你的尝试:
"export PATH="$PATH:$GOPATH/bin""
实际上是一个字符串 concatentation ,由 3个单独的字符串组成:
"export PATH="
,作为双引号字符串,发生不以包含$
- 前缀插值元素,扩展为文字export PATH=
$PATH:$GOPATH/bin
,作为未加引号的字符串,需要额外的shell expansions,这不仅涉及扩展变量$PATH
和$GOPATH
各自的值,但也应用分词和路径名扩展(globbing)。""
,相当于空字符串,实际上会被忽略。请注意类似POSIX的shell如何通过将字符串 - 未引用或单引号或双引号 - 直接放在另一个上来组成更大的字符串(连接字符串)。