代码之家  ›  专栏  ›  技术社区  ›  Vi.

如何在bash中打印变量的值(可以是“-n”或“-e”)?

  •  3
  • Vi.  · 技术社区  · 14 年前

    如何从bash打印“-n”、“-e”或“-n e e n e n”(结尾没有换行,没有调用外部程序)?

    Q="-n"

    echo -n "$Q" 不及格

    echo -- "$Q" 不及格

    cat <<< "$Q" #失败,同时启动外部程序

    printf -- '%s' "$Q" 成功, 但启动外部程序

    3 回复  |  直到 14 年前
        1
  •  3
  •   Daniel Pryden    14 年前

    在狂欢中, printf 是内置的,因此不会调用外部程序。

    $ help printf 
    printf: printf [-v var] format [arguments]
    

    printf格式和打印格式控制下的参数。 格式 是包含三种对象类型的字符串:普通 字符,简单地复制到标准输出,字符 逃跑 转换并复制到标准输出的序列,以及 格式规范,每个规范都会导致打印下一个 连续的 争论。除了标准的printf(1)格式之外,%b表示 到 展开相应参数中的反斜杠转义序列,并%q 表示引用参数的方式可以重用为shell输入。 如果提供了-v选项,则将输出放入 shell变量var而不是发送到标准输出。

        2
  •  3
  •   Annika Backstrom    14 年前
    echo -en \\x2Dn
    
        3
  •  0
  •   Dennis Williamson    14 年前

    当然,正确和更便携的方法是使用 printf 但是,这是可行的:

    $ Q='-n'
    $ echo -ne '\0'"$Q"
    

    但如果你有反斜杠序列,你想打印字面上的话,它就失败了:

    $ Q='-n\nX'
    $ echo -ne '\0'"$Q"
    -n
    X
    

    当需要的是“-n\nx”。在这种情况下,这是可行的:

    $ echo -n $'\0'"$Q"
    -n\nX$                 # (no newline, so prompt follows on the same line)
    

    但不是为了 Q='-n' !

    如果我们想用 普林特 ?

    $ Q='-n\nX'
    $ printf "$Q"
    -bash: printf: -n: invalid option
    $ printf -- "$Q"
    -n
    X
    $ printf "%s" "$Q"
    -n\nX$                 # (no newline, so prompt follows on the same line)