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

标签 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

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

相关文章:

c - ARM Linux 可执行文件神秘地运行在 x86_64 上

c++ - 在没有root权限的linux上安装gcc

python - 与 Bash/shell 相比,使用 Python 连接到 FTP 服务器有什么优势吗?

bash - at命令未执行

java - 在windows 8命令行上编译Junit报错

linux - 将公网ip写入txt并自动上传到FTP? (Linux)

c++ - 在 Linux 上使用 kbhit() 和 getch()

python - 运行 ./file.py 和 python file.py 有什么区别?

linux - 直接在提示符上运行控制台应用程序有什么区别

java - 批处理文件如何接受 Java 的参数?