【问题标题】: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\"'
      

      需要注意的重要事项:

      1. 您只需以交互方式执行一次,即可生成要使用的 echo 命令。建议的答案是不要在每台 4300 机器上创建临时文件。

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

      3. 如果使用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\"'
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-09-23
          • 1970-01-01
          相关资源
          最近更新 更多