代码之家  ›  专栏  ›  技术社区  ›  Paebbels

Bash中的三个反斜杠'echo-e'的行为很奇怪

  •  0
  • Paebbels  · 技术社区  · 7 年前

    我有多个Bash变量用于ANSI终端颜色。一个是 ANSI_NOCOLOR 定义如下:

    ANSI_NOCOLOR="\e[0m"
    

    \ \\ 在Bash字符串中,我得到了一个意外的输出。

    echo -e "command --with --many --options \\$ANSI_NOCOLOR"
    echo -e "--more --options"
    

    这将导致:

    command --with --many --options \e[0m
    --more --options
    

    这个例子可以简化为:

    $ echo -e "\\\e[0m"
    \e[0m
    

    预期的/C类行为:

    转义序列是左关联的。因此,

    1. 前两个 打印为 \
    2. 剩下的 \ e ESC

    解决方法:
    在用反斜杠刨了几下后,我发现,那是5!!需要反斜杠。我仍然想读一个解释,为什么它的行为,因为它是。

    $ echo -e "\\\\\e[33mfoo\e[0m"
    \foo
    

    1 回复  |  直到 7 年前
        1
  •  3
  •   that other guy    7 年前

    1. 双引号字符串的转义。此通行证可识别 \\ \e
    2. echo -e 转义序列。此通行证可同时识别 \\ \电子 .

    所以:

    1. \\\e
    2. 双引号替换 \\ 但却没有得到支持 \电子
    3. 你现在有了 \\e
    4. \\
    5. 你现在有了

    这是您选择 printf 结束 echo 每当任何值可能包含反斜杠时。

    推荐文章