我怎么echo
文字字符串-e
别无其他?
我试图更好地理解如何对shell参数进行转义。
以下命令不起作用:
echo -e # prints nothing
echo '-e' # prints nothing
echo "-e" # prints nothing
echo \-e # prints nothing
echo \\-e # prints \-e
echo '\-e' # prints \-e
echo "'-e'" # prints '-e' (with quotes)
echo -- -e # prints -- -e
我找不到一个既不包含引号也不包含斜杠的内容。
答案 0 :(得分:5)
如何在bash中回显文字字符串“ -e”(以及其他内容)?
printf '%s\n' '-e'
printf -- '-e\n'
来自man echo -e
的一个选项:
-e
启用反斜杠转义的解释
回声 ...
如果指定-e选项,则启用对以下反斜杠转义字符的解释。
...
echo不能解释-意味着选项的结束。
因此echo -e
将使回声将-e
解释为一个标志并打印空换行符。
要打印-e
,您基本上必须使用printf
(或者您可以使用echo
的实现方式)。我不相信只能使用内置的bash echo打印-e
。
printf
具有更高的可移植性。 echo
的某些实现不带-e
参数,并且可能有效。在网上,您可以找到various sites关于回声可移植性问题。
答案 1 :(得分:3)
echo -e '\x2de'
不是很可读,但是可以用
答案 2 :(得分:2)
我假设真正的问题是为什么:
根据您是以foo(4)
还是foo(2+2)
或foo((int)16/4)
调用C#或Java函数,其行为永远不会有所不同,因为该信息在函数运行时就消失了。它可以告诉您通过了什么,但无法告诉您如何通过。
出于相同的原因,根据是否或如何转义其参数,命令的行为永远不会有所不同。引号和转义符是 how ,而结果字符串参数是 what 。
以下是每次尝试的等效execlp
调用(echo
内置在bash中,但行为相同):
# v-- How you passed it v-- What you passed
echo -e # execlp("echo", "echo", "-e", 0); # prints nothing
echo '-e' # execlp("echo", "echo", "-e", 0); # prints nothing
echo "-e" # execlp("echo", "echo", "-e", 0); # prints nothing
echo \-e # execlp("echo", "echo", "-e", 0); # prints nothing
echo \\-e # execlp("echo", "echo", "\\-e", 0); # prints \-e
echo '\-e' # execlp("echo", "echo", "\\-e", 0); # prints \-e
echo "'-e'" # execlp("echo", "echo", "'-e'", 0); # prints '-e' (with quotes)
echo -- -e # execlp("echo", "echo", "--", "-e", 0); # prints -- -e
如您所见,如何完全不影响输出。这一切都归结为什么。这就是为什么世界上所有逃避都不会产生预期效果的原因。
答案 3 :(得分:0)
另一种方法,使用awk
和Bash C样式字符串以及'here字符串':
$ awk '1' <<< $'-e'
-e
不带引号的作品(如果这是您的目标):
$ awk '1' <<< -e
-e