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

时间:2010-06-18 14:03:29

标签: bash

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

Q="-n"

echo -n "$Q" #failed

echo -- "$Q" #failed

cat <<< "$Q"#failed,也启动外部程序

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

3 个答案:

答案 0 :(得分:3)

echo -en \\x2Dn

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:0)

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