如何从bash中打印“-n”,“-e”或“-neeenen”(最后没有换行符,不需要调用外部程序)?如何在bash中打印变量的值(可以是“-n”或“-e”)?
Q="-n"
echo -n "$Q"
#失败
echo -- "$Q"
#失败
cat <<< "$Q"
#失败,还可启动外部程序
printf -- '%s' "$Q"
#成功,但启动外部程序
如何从bash中打印“-n”,“-e”或“-neeenen”(最后没有换行符,不需要调用外部程序)?如何在bash中打印变量的值(可以是“-n”或“-e”)?
Q="-n"
echo -n "$Q"
#失败
echo -- "$Q"
#失败
cat <<< "$Q"
#失败,还可启动外部程序
printf -- '%s' "$Q"
#成功,但启动外部程序
在bash中,printf
是内置的,因此不会调用外部程序。下的格式控制
$ help printf printf: printf [-v var] format [arguments]
printf的格式和打印参数。 FORMAT 是一个字符串,它包含三种类型的对象:平纹 字符,其简单地复制到标准输出,字符 逸出 序列被转换和复制到标准输出,和 格式规范,其中的每一个使打印下一个 连续 的说法。除标准printf(1)格式外,%b表示 至 在相应参数中展开反斜杠转义序列,而%q 表示以可作为shell输入重用的方式引用参数。 如果提供了-v选项,则输出将置于 shell变量VAR的值中,而不是发送到标准输出。
echo -en \\x2Dn
当然,正确的和更简单的方法是使用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)
不,我正在寻找一种方法来打印变量的值。 (改进问题) – 2010-06-18 14:28:11