可变扩展的回声困境

时间:2015-01-02 19:58:18

标签: linux bash shell variables expansion

我想将字符串PROMPT_COMMAND='echo -ne \"\033]0;${USER}@${HOSTNAME}: ${PWD}\007\"'附加到4300台服务器上的.bashrc文件的末尾。

我在转义时遇到了一些困难,显然我希望变量在附加到文件时不会展开,以便文本保持原始状态。

我怎么能这样做?我尝试在变量的开头添加斜杠,但这似乎不是我想要的。

3 个答案:

答案 0 :(得分:4)

最好使用heredoc

cat >> .bashrc <<'+'
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'
+

答案 1 :(得分:3)

以下是在命令行中需要逐字值而不知道如何引用它的一般解决方案:

将您的值完全按照您希望的方式放入文件中:

$ 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\"'

需要注意的重要事项:

  1. 您将以交互方式执行此操作,以生成要使用的echo命令。建议的答案不是在每台4300机器上创建临时文件。

  2. 这是特定的bash,它产生的命令也是如此。

  3. 如果您使用ssh,则需要单独的转义层。

答案 2 :(得分:2)

尝试bash $ quoting

echo $'PROMPT_COMMAND=\'echo -ne \\\"\\033]0;${USER}@${HOSTNAME}: ${PWD}\\007\\\"\''
PROMPT_COMMAND='echo -ne \"\033]0;${USER}@${HOSTNAME}: ${PWD}\007\"'