当前位置: 首页>>技术教程>>正文


bash – 如何打印 “-n” 而不发出换行符?

,

问题描述

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

最佳思路

问题在于 echo-n 解释为参数。在默认的 bash 实现上,这意味着(来自 help echo ):

\\n

  -n  do not append a newline\\n

\\n

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

  1. 通过包含另一个角色来使其变得不可行。例如,告诉 echo 不要用 -n 打印换行符,然后告诉它用 -e 解释反斜杠转义并显式添加换行符。

    \n

    $ echo -ne '-n\\n'\n-n\n
  2. 或者,只需包含一个空格

    \n

    $ echo " -n"\n -n\n

    \n

    然而,这会增加您可能不想要的空间。

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

    \n

    $ echo -e "\\b-n"\n-n\n

    \n

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

  4. 使用诡计

    \n

    $ echo n- | rev\n-n\n

    \n

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

  5. 使用the right tool for the job

    \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 "

这是有效的,因为虽然 -necho 的有效选项,但 -n 后面有一个空格则不是。由于它不是一个选项,因此 echo 仅打印它。

第五种思路

你们实在是想多了。

 echo -e \\055n

或者没有尾随换行符

 echo -en \\055n

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/14421.html,未经允许,请勿转载。