我正在尝试-n使用echo命令进行打印。但是,如果我只是键入echo -n,它只会发出换行符,而不会显示-n,而是发出换行符。
getopt(???)来解析命令行
我正在尝试-n使用echo命令进行打印。但是,如果我只是键入echo -n,它只会发出换行符,而不会显示-n,而是发出换行符。
getopt(???)来解析命令行
Answers:
问题是将echo解释-n为参数。在默认的bash实现中,这意味着(来自help echo):
-n do not append a newline
有多种解决方法:
通过包含其他字符,将其变为不可选项。例如,告诉echo不要使用来打印换行符-n,然后告诉它使用来解释反斜杠转义-e符并显式添加换行符。
$ echo -ne '-n\n'
-n或者,只需添加一个空格
$ echo " -n"
-n
但是,这会增加您可能不想要的空间。
在其前面使用非打印字符。这里。我正在使用退格键(\b)
$ echo -e "\b-n"
-n
这还会增加您可能不想要的额外字符。
使用骗术
$ echo n- | rev
-n
的 rev命令仅将其输出反向打印。
$ printf -- '-n\n'
-ngrep '^-n'。pritnf确实是要走的路。
printf反正还是更好,但是问题是关于echo。
echo -e "-n\c"确实很准确。
\c被抑制进一步输出
有时候,使用正确的工具是个好主意。您可以printf改用:
% printf "-n\n"
-n
echo,而printf标准化程度更高。
您可以使用此命令,但是会增加额外的空间。
echo -e "\r-n"
这是一种hack。
-e 启用反斜杠命令符号。
\r 是回车。
实际上,任何\有效字符都可以在字符串的任何位置使用。
您可以通过看到哪些有效help echo。
echo "-n"无法-n使用,因为它用作的参数echo。
PS恕我直言最好的解决方案是
echo -e "-n\c"
它不会添加任何额外的字符。
echo -e "-n\n"
打印相同,但换行符为char。
-n是有效的,-nfoo不是这样,将被打印出来。
man echo也有。但是help好一点。
/bin/echo是完全不同的事情,当您echo在bash中运行时,您将获得内置的内容,具体取决于您的shell。
你们真的想得太多了。
echo -e \\055n
或没有尾随换行符
echo -en \\055n
printf "-n\n" 想得太多?
/bin/echo并且至少可以通过以下方式调用:echo -e "\055n"
为了扩展@AB的答案,唯一可移植的使用方式echo是避免使用任何选项-n。考虑printf在可用的地方使用代替。该参考页提供了更多详细信息,并很好地说明了何时,如何echo以及printf应使用它们:
如今,echo(1)仅在省略标志和转义序列时才可移植。如果您需要的不仅仅是纯文本,请使用printf(1)。
在Bash脚本中,您可以运行:
echo -n -
echo n
或在交互外壳中:
echo -n - ; echo n
这echo是一个-字符和一个n字符。
-pilot6@Pilot6:~$。第二个输出n。
&&-我真的不会说这个答案是错误的。
echo -n -- -n有效(没有方便测试的Linux盒)?