我正在尝试-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'
-n
grep '^-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盒)?