> ~/.profile 但这会在写入-6ren">
gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:34:31 26 4
gpt4 key购买 nike

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

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

最佳答案

尝试:

echo 'export PATH="$PATH:$GOPATH/bin"' >> ~/.profile

单引号 POSIX-like 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com