【问题标题】:Echo woes with variable expansion可变扩展的回声问题
【发布时间】:2015-01-02 19:58:18
【问题描述】:
我想将字符串 PROMPT_COMMAND='echo -ne \"\033]0;${USER}@${HOSTNAME}: ${PWD}\007\"' 附加到跨 4300 个服务器的 .bashrc 文件的末尾。
我在转义时遇到了一些困难,显然我希望变量在附加到文件时不会扩展,以便文本保持原始。
我该怎么做?我尝试在变量的开头添加斜杠,但这似乎不是我想要的。
【问题讨论】:
标签:
linux
bash
shell
variables
expansion
【解决方案1】:
使用heredoc可能会更好
cat >> .bashrc <<'+'
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'
+
【解决方案2】:
当您想要在命令行中逐字显示值但不知道如何引用它时,这是一个通用的解决方案:
按照您想要的方式将您的值放入文件中:
$ cat file
PROMPT_COMMAND='echo -ne \"\033]0;${USER}@${HOSTNAME}: ${PWD}\007\"'
使用 printf 自动转义:
$ printf "echo %q\n" "$(< file)"
echo PROMPT_COMMAND=\'echo\ -ne\ \\\"\\033\]0\;\$\{USER\}@\$\{HOSTNAME\}:\ \$\{PWD\}\\007\\\"\'
生成的命令产生与文件相同的结果,所有特殊字符和非尾随换行符都完好无损:
$ echo PROMPT_COMMAND=\'echo\ -ne\ \\\"\\033\]0\;\$\{USER\}@\$\{HOSTNAME\}:\ \$\{PWD\}\\007\\\"\'
PROMPT_COMMAND='echo -ne \"\033]0;${USER}@${HOSTNAME}: ${PWD}\007\"'
需要注意的重要事项:
您只需以交互方式执行一次,即可生成要使用的 echo 命令。建议的答案是不要在每台 4300 机器上创建临时文件。
它是特定于 bash 的,它生成的命令也是如此。
如果使用ssh,需要单独一层转义。
【解决方案3】:
试试 bash $ quoting
echo $'PROMPT_COMMAND=\'echo -ne \\\"\\033]0;${USER}@${HOSTNAME}: ${PWD}\\007\\\"\''
PROMPT_COMMAND='echo -ne \"\033]0;${USER}@${HOSTNAME}: ${PWD}\007\"'