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

Mic*_*ael 8 echo arguments

我不知道如何用 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
Run Code Online (Sandbox Code Playgroud)

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

slm*_*slm 8

如果您不想使用,prinf您有几个选项,至少根据这个 SO Q&A,标题为:echo “-n” will not print -n? .

这似乎是你最好的选择:

$ echo "x-n" | cut -c 2-
-n
Run Code Online (Sandbox Code Playgroud)

或者一些变化:

$ echo -- '-n'|cut -d" " -f2
-n
Run Code Online (Sandbox Code Playgroud)

打印输出

printf 没有这个问题:

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


Sté*_*las 8

为什么要使用echo使用printf

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

或者:

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

echo

echo -n
Run Code Online (Sandbox Code Playgroud)

将以-n<LF>符合 UNIX 的echo.

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

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

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

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

Zshecho可以做到:

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

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

echo '\u002Dn'
Run Code Online (Sandbox Code Playgroud)

鱼的echo

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

Ksh 和 Zshprint可以通过以下方式实现:

print - -n
Run Code Online (Sandbox Code Playgroud)

或者:

print -- -n
Run Code Online (Sandbox Code Playgroud)

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

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

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