我正在尝试-n
使用该echo
命令进行打印。但是如果我只是输入echo -n
,它只会发出一个换行符,而不是显示出来-n
,而是发出一个换行符。
ter*_*don 31
问题是将echo
解释-n
为一个论点。在默认的 bash 实现中,这意味着(来自help echo
):
Run Code Online (Sandbox Code Playgroud)-n do not append a newline
有多种方法可以解决这个问题:
通过包含另一个角色,使其成为一种无法选择的东西。例如,告诉echo
不要用 打印换行符-n
,然后告诉它解释反斜杠转义-e
并显式添加换行符。
$ echo -ne '-n\n'
-n
Run Code Online (Sandbox Code Playgroud)或者,只包含一个空格
$ echo " -n"
-n
Run Code Online (Sandbox Code Playgroud)
但是,这会增加一个您可能不想要的空间。
在它之前使用非打印字符。这里。我正在使用退格键 ( \b
)
$ echo -e "\b-n"
-n
Run Code Online (Sandbox Code Playgroud)
这还会添加一个您可能不想要的额外字符。
使用诡计
$ echo n- | rev
-n
Run Code Online (Sandbox Code Playgroud)
该rev
命令只是将其输出反向打印。
$ printf -- '-n\n'
-n
Run Code Online (Sandbox Code Playgroud)A.B*_*.B. 15
有时使用正确的工具是个好主意。你可以printf
改用:
% printf "-n\n"
-n
Run Code Online (Sandbox Code Playgroud)
您可以使用此命令,但它会增加一个额外的空间。
echo -e "\r-n"
Run Code Online (Sandbox Code Playgroud)
这是一种黑客攻击。
-e
启用反斜杠命令符号。
\r
是回车。
实际上,任何\
有效字符都可以在字符串的任何位置执行。
您可以通过 来查看哪些有效help echo
。
echo "-n"
不起作用,因为-n
用作echo
.
PS最好的解决方案恕我直言是
echo -e "-n\c"
Run Code Online (Sandbox Code Playgroud)
它不会添加任何额外的字符。
echo -e "-n\n"
Run Code Online (Sandbox Code Playgroud)
打印相同但换行符。
我想如果你肯定只想使用echo
,这应该会让你满意:
echo "-n "
Run Code Online (Sandbox Code Playgroud)
这-n
是有效的echo
,因为 while是 的有效选项,-n
后面有一个空格不是。由于它不是一个选项,echo
只需打印它。
你们真是想多了。
echo -e \\055n
Run Code Online (Sandbox Code Playgroud)
或者没有尾随换行符
echo -en \\055n
Run Code Online (Sandbox Code Playgroud)