我有一个自动设置脚本,在创建新用户时执行。它运行这行代码来设置 golang 环境: echo "export PATH="$PATH:$GOPATH/bin"">> ~/.profile
但这会在写入文件之前扩展所有环境变量。有没有办法从命令行将 export PATH="$PATH:$GOPATH/bin"
写入文件而不扩展环境变量?
最佳答案
尝试:
echo 'export PATH="$PATH:$GOPATH/bin"' >> ~/.profile
单引号类 POSIX shell 中的字符串(例如 bash
)将其内容视为文字,这就是您想要的.
此处使用双引号字符串的唯一原因是有选择扩展变量引用在前面 - 这不适用在你的情况下。
也就是说,这是一个例子:
$ echo "Honey, I'm \"$USER\" and I'm \$HOME."
Honey, I'm "jdoe" and I'm $HOME.
反斜杠转义用于转义嵌入的 "
和 $
实例,这些实例应被视为文字。
至于你尝试过的:
"export PATH="$PATH:$GOPATH/bin""
实际上是一个字符串串联,由3个独立的字符串组成:
"export PATH="
,作为双引号字符串,不包含以$
为前缀的插值元素,它会展开到文字export PATH=
$PATH:$GOPATH/bin
,作为不带引号的字符串,受附加 shell expansions 的约束。 ,这不仅涉及将变量$PATH
和$GOPATH
扩展为其各自的值,还应用分词和路径名扩展(通配)。""
,相当于空字符串并被有效忽略。
请注意,类似 POSIX 的 shell 如何允许您通过将字符串(不带引号、单引号或双引号)直接并排放置来组成更大的字符串(连接字符串)。
关于linux - 我可以阻止 echo 扩展环境变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39402616/