如何在不发出换行符的情况下打印“-n”?

Sta*_* OS 18 bash echo

我正在尝试-n使用该echo命令进行打印。但是如果我只是输入echo -n,它只会发出一个换行符,而不是显示出来-n,而是发出一个换行符。

ter*_*don 31

问题是将echo解释-n为一个论点。在默认的 bash 实现中,这意味着(来自help echo):

  -n  do not append a newline
Run Code Online (Sandbox Code Playgroud)

有多种方法可以解决这个问题:

  1. 通过包含另一个角色,使其成为一种无法选择的东西。例如,告诉echo不要用 打印换行符-n,然后告诉它解释反斜杠转义-e并显式添加换行符。

    $ echo -ne '-n\n'
    -n
    
    Run Code Online (Sandbox Code Playgroud)
  2. 或者,只包含一个空格

    $ echo " -n"
     -n
    
    Run Code Online (Sandbox Code Playgroud)

    但是,这会增加一个您可能不想要的空间。

  3. 在它之前使用非打印字符。这里。我正在使用退格键 ( \b)

    $ echo -e "\b-n"
    -n
    
    Run Code Online (Sandbox Code Playgroud)

    这还会添加一个您可能不想要的额外字符。

  4. 使用诡计

    $ echo n- | rev
    -n
    
    Run Code Online (Sandbox Code Playgroud)

    rev命令只是将其输出反向打印。

  5. 为工作使用正确的工具

    $ printf -- '-n\n'
    -n
    
    Run Code Online (Sandbox Code Playgroud)

  • 看起来 `echo -e "-n\c"` 做的完全一样。 (2认同)

A.B*_*.B. 15

有时使用正确的工具是个好主意。你可以printf改用:

% printf "-n\n"       
-n
Run Code Online (Sandbox Code Playgroud)


Pil*_*ot6 7

您可以使用此命令,但它会增加一个额外的空间。

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)

打印相同但换行符。


Sad*_*adi 5

我想如果你肯定只想使用echo,这应该会让你满意:

echo "-n "
Run Code Online (Sandbox Code Playgroud)

-n是有效的echo,因为 while是 的有效选项,-n后面有一个空格不是。由于它不是一个选项,echo只需打印它。


Jos*_*hua 5

你们真是想多了。

 echo -e \\055n
Run Code Online (Sandbox Code Playgroud)

或者没有尾随换行符

 echo -en \\055n
Run Code Online (Sandbox Code Playgroud)