Star OS Asked: 2015-11-24 09:46:41 +0800 CST2015-11-24 09:46:41 +0800 CST 2015-11-24 09:46:41 +0800 CST 如何在不发出换行符的情况下打印“-n”? 772 我正在尝试-n使用echo命令进行打印。但如果我只是输入echo -n,它只会发出一个换行符,不会显示-n,而是发出一个换行符。 bash 9 个回答 Voted Best Answer terdon 2015-11-24T10:06:06+08:002015-11-24T10:06:06+08:00 问题是echo将 the 解释-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 A.B. 2015-11-24T09:50:26+08:002015-11-24T09:50:26+08:00 有时使用正确的工具是个好主意。您可以printf改用: % printf "-n\n" -n Pilot6 2015-11-24T09:56:49+08:002015-11-24T09:56:49+08:00 您可以使用此命令,但它会增加一个额外的空间。 echo -e "\r-n" 这是一种黑客攻击。 -e启用反斜杠命令符号。 \r是一个回车。 实际上,任何\有效字符都可以出现在字符串的任何位置。 您可以通过 来查看哪些有效help echo。 echo "-n"不起作用,因为-n用作 的参数echo。 PS恕我直言,最好的解决方案是 echo -e "-n\c" 它不添加任何额外的字符。 echo -e "-n\n" 打印相同但带有换行字符。 Sadi 2015-11-24T09:53:45+08:002015-11-24T09:53:45+08:00 我想如果你肯定只想使用echo,这应该让你满意: echo "-n " 这是有效的,因为 while-n是 的有效选项echo,-n后面有一个空格。因为它不是一个选项,echo所以只打印它。 Joshua 2015-11-24T13:53:30+08:002015-11-24T13:53:30+08:00 你们真是想多了。 echo -e \\055n 或者没有尾随换行符 echo -en \\055n jiwopene 2015-11-24T12:30:20+08:002015-11-24T12:30:20+08:00 在 Bash 脚本中,您可以运行: echo -n - echo n 或者在交互式 shell 中: echo -n - ; echo n 这echo是一个-字符和一个n字符。 Dmitry Grigoryev 2015-11-25T04:17:56+08:002015-11-25T04:17:56+08:00 要扩展@AB 的答案,唯一可移植的使用方式echo是避免使用任何选项,如-n. 在可用的情况下考虑使用printf。此参考页面提供了更多详细信息,并很好地解释了何时、如何echo以及printf应该使用: 如今,echo(1) 只有在省略标志和转义序列时才可移植。如果您需要的不仅仅是纯文本,请改用 printf(1)。 kos 2015-11-26T12:01:29+08:002015-11-26T12:01:29+08:00 其他三种方式: $ echo -e '\x2dn' # ASCII hexadecimal value -n $ echo -e '\u002dn' # Unicode code point -n $ echo -e '\u2dn' # Unicode code point shortened -n jiwopene 2015-12-09T12:46:37+08:002015-12-09T12:46:37+08:00 你可以跑 printf -n;echo 在 Busybox Ash 中测试
问题是
echo
将 the 解释-n
为参数。在默认的 bash 实现中,这意味着(来自help echo
):有多种方法可以解决这个问题:
通过包含另一个角色使其成为不可选项的东西。例如,告诉
echo
不要使用 打印换行符-n
,然后告诉它解释反斜杠转义-e
符并显式添加换行符。或者,只需包含一个空格
但是,这会增加一个您可能不想要的空间。
在它之前使用一个非打印字符。这里。我正在使用退格键 (
\b
)这还会添加一个您可能不想要的额外字符。
使用诡计
该
rev
命令只是将其输出颠倒过来。为工作使用正确的工具
有时使用正确的工具是个好主意。您可以
printf
改用:您可以使用此命令,但它会增加一个额外的空间。
这是一种黑客攻击。
-e
启用反斜杠命令符号。\r
是一个回车。实际上,任何
\
有效字符都可以出现在字符串的任何位置。您可以通过 来查看哪些有效
help echo
。echo "-n"
不起作用,因为-n
用作 的参数echo
。PS恕我直言,最好的解决方案是
它不添加任何额外的字符。
打印相同但带有换行字符。
我想如果你肯定只想使用
echo
,这应该让你满意:这是有效的,因为 while
-n
是 的有效选项echo
,-n
后面有一个空格。因为它不是一个选项,echo
所以只打印它。你们真是想多了。
或者没有尾随换行符
在 Bash 脚本中,您可以运行:
或者在交互式 shell 中:
这
echo
是一个-
字符和一个n
字符。要扩展@AB 的答案,唯一可移植的使用方式
echo
是避免使用任何选项,如-n
. 在可用的情况下考虑使用printf
。此参考页面提供了更多详细信息,并很好地解释了何时、如何echo
以及printf
应该使用:其他三种方式:
你可以跑
在 Busybox Ash 中测试