我使用GNU bash,版本3.00.15(1) - 释放(x86_64-redhat-linux-gnu)。并且这个命令:回声“-e”不打印任何东西
echo "-e"
不打印任何东西。我猜这是因为“-e”是echo命令的有效选项之一,因为echo“-n”和echo“-E”(其他两个选项)也会产生空字符串。
问题是如何逃避序列“-e”以得到自然输出(“-e”)。
我使用GNU bash,版本3.00.15(1) - 释放(x86_64-redhat-linux-gnu)。并且这个命令:回声“-e”不打印任何东西
echo "-e"
不打印任何东西。我猜这是因为“-e”是echo命令的有效选项之一,因为echo“-n”和echo“-E”(其他两个选项)也会产生空字符串。
问题是如何逃避序列“-e”以得到自然输出(“-e”)。
这是一个艰难的一个;)
通常你会使用双破折号告诉命令,它应该停止解释选项,但回声只会输出那些:
$ echo -- -e
-- -e
您可以使用-e本身来解决这个问题:
$ echo -e '\055e'
-e
而且,正如其他人所指出的,如果你不使用bash的内置echo
坚持,你/bin/echo
二进制可能是该工具的GNU版本(检查手册页),从而了解POSIXLY_CORRECT
环境变量:
$ POSIXLY_CORRECT=1 /bin/echo -e
-e
你可以通过做
echo "-e "
这将是破折号,即空间作弊。
另外,您可以使用更复杂,但更精确:
echo -e \\\\x2De
[[email protected] mail]# POSIXLY_CORRECT=1; export POSIXLY_CORRECT [[email protected] mail]# /bin/echo "-e" -e [[email protected] mail]#
另一种方式:
echo -e' '
echo -e " \b-e"
密切注意该手册页:)
SYSV3=1 /usr/bin/echo -e
作品,在Solaris上至少
另一种替代方法:
echo x-e | sed 's/^x//'
这是由autoconf manual建议的方式:
[...],通常可以使用以避免这个问题“回响“× $ word“',稍后在管道中考虑'x'。
打印任意字符串的唯一正确的方法:
printf "%s" "$vars"
我喜欢一个使用herestring:
cat <<<"-e"
你碰巧知道,为什么`回声-e`做不从Makefiles工作? – 2010-10-17 00:00:06
@dma_k:适合我(tm)。 make(1)不使用您正在使用的$ SHELL内建程序,因此它的行为会有所不同。 – hop 2010-10-18 19:12:42
谢谢,太棒了!的确,在Makefile中设置`SHELL =/bin/bash`解决了这个问题! – 2010-10-22 09:29:53