如何用 `echo` 打印“-n”?

如何用 `echo` 打印“-n”?

我不知道如何用这个已有 30 多年历史的命令打印字符串“-n” echo

我尝试过这些:

Michaels:Scripts$ echo -n
Michaels:Scripts$ echo "-n"
Michaels:Scripts$ echo -e "-n"
Michaels:Scripts$ echo -- -n
-- -n
Michaels:Script$ echo -- "-n"
-- -n
Michaels:Script$ echo "\-n"
\-n

我使用 Mac OS X ML。我认为这种行为非常奇怪和出乎意料。

答案1

如果您不想使用,prinf您有几个选择,至少根据此 SO Q&A,标题为:echo“-n”不会打印-n?

这似乎是你最好的选择:

$ echo "x-n" | cut -c 2-
-n

或者一些变化:

$ echo -- '-n'|cut -d" " -f2
-n

打印函数

printf没有这个问题:

$ printf "%s\n" -n
-n

答案2

你为什么要使用echo使用printf:

printf -- '-n\n'

或者:

printf '%s\n' -n

echo

echo -n

-n<LF>将以UNIX 一致的方式输出echo

bash、、dashGNU 或zshecho(在大多数系统上的默认配置中)可以通过以下方式实现:

echo -en '-n\n'

或者(在基于 ASCII 的系统上):

echo -e '\055n'

Zshecho可以通过以下方式做到这一点:

echo - -n

或者(假设该bsdecho选项未启用):

echo '\u002Dn'

鱼有echo

echo -- -n

Ksh 和 Zshprint可以通过以下方式做到这一点:

print - -n

或者:

print -- -n

bash(但不是zsh),假设posixxpg_echo没有同时启用:

echo -n -; echo n

有趣的是,不可能以 POSIX 方式单独输出-necho也就是说,或多或少,可以在 Unices 和类 Unix 之间移植),因为如果第一个参数是-n或任何参数包含反斜杠字符,则行为是未指定的。

答案3

由于历史原因,echo不进行通常类型的参数解析,其中以 开头的任何参数-都是选项,但--表示选项结束的信号除外。该echo命令大部分情况下都会不加更改地打印其参数,但根据 UNIX 变体、shell 以及 shell 的配置方式,它可能会解释一些选项(-e-E-n-),并且可能会特殊对待反斜杠+字符。

没有便携式的方式可以-n单独打印echo。打印字符串而不必担心特殊字符的便携式方法是

printf %s -n

或者更一般地说print %s "$somestring"。如果您想在字符串后打印最后的换行符,请将其设为printf '%s\n' -n.

答案4

如果您需要“-n”作为前两个符号,请尝试以下操作:

echo -e '\r-n'

另一种方式:

echo -n '-'; echo 'n'

相关内容