问题描述
我正在尝试使用 echo
命令打印 -n
。但如果我只是输入 echo -n
,它只会发出换行符,不会显示 -n
,而是发出换行符。
最佳思路
问题在于 echo
将 -n
解释为参数。在默认的 bash 实现上,这意味着(来自 help echo
):
\\n
-n do not append a newline\\n
\\n
有多种方法可以解决这个问题:
-
通过包含另一个角色来使其变得不可行。例如,告诉
echo
不要用-n
打印换行符,然后告诉它用-e
解释反斜杠转义并显式添加换行符。\n
$ echo -ne '-n\\n'\n-n\n
-
或者,只需包含一个空格
\n
$ echo " -n"\n -n\n
\n
然而,这会增加您可能不想要的空间。
-
在它前面使用非打印字符。这里。我使用退格键 (
\\b
)\n
$ echo -e "\\b-n"\n-n\n
\n
这还添加了您可能不想要的额外字符。
-
使用诡计
\n
$ echo n- | rev\n-n\n
\n
rev
命令只是将其输出反转打印。 -
\n
$ printf -- '-n\\n'\n-n\n
次佳思路
有时使用正确的工具是个好主意。您可以使用 printf
代替:
% printf "-n\n"
-n
第三种思路
您可以使用此命令,但它会添加额外的空格。
echo -e "\r-n"
这是一种黑客行为。
-e
启用反斜杠命令符号。
\\r
是回车符。
实际上,任何 \\
有效字符都可以出现在字符串的任何位置。
您可以通过 help echo
查看哪些是有效的。
echo "-n"
不起作用,因为 -n
用作 echo
的参数。
附:恕我直言,最好的解决方案是
echo -e "-n\c"
它不添加任何额外的字符。
echo -e "-n\n"
打印相同但带有新行字符。
第四种思路
我认为如果您确实只想使用 echo
,这应该会让您满意:
echo "-n "
这是有效的,因为虽然 -n
是 echo
的有效选项,但 -n
后面有一个空格则不是。由于它不是一个选项,因此 echo
仅打印它。
第五种思路
你们实在是想多了。
echo -e \\055n
或者没有尾随换行符
echo -en \\055n