【问题标题】:How to print value of a variable (which can be "-n" or "-e") in bash?如何在bash中打印变量的值(可以是“-n”或“-e”)?
【发布时间】:2010-06-18 23:30:01
【问题描述】:

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

Q="-n"

echo -n "$Q"# 失败

echo -- "$Q"# 失败

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

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

【问题讨论】:

    标签: bash


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:
      echo -en \\x2Dn
      

      【讨论】:

      • 不,我正在寻找一种打印变量值的方法。 (细化问题)
      【解决方案3】:

      当然,正确且更便携的方法是使用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'

      如果我们想用printf打印文字字符串怎么办?

      $ 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)
      

      【讨论】:

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