我不知道如何用这个已有 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
、、dash
GNU 或zsh
echo(在大多数系统上的默认配置中)可以通过以下方式实现:
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
),假设posix
和xpg_echo
没有同时启用:
echo -n -; echo n
有趣的是,不可能以 POSIX 方式单独输出-n
(echo
也就是说,或多或少,可以在 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'