13

与这个问题非常相似。

我正在使用 BASH 中的自动脚本迭代一些事情。偶尔脚本会遇到“-n”,echo 会尝试解释它。

尝试了这个:

 $ POSIXLY_CORRECT=1 /bin/echo -n

 $ POSIXLY_CORRECT=1 /bin/echo "-n"

 

但它每次都解释这个论点。

然后这是可行的,但可以在字符串中命中转义字符,这就是为什么我不想将空字符应用于所有输入并使用 -e。

$ echo -e "\x00-n"
-n

printf 是可能的,但除非没有其他选项,否则应避免使用(并非所有机器都将 printf 作为实用程序)。

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

那么有没有办法让 echo 打印“-n”?

4

6 回答 6

9

printf应该是所有 shell 中的内置程序,除非你的某些机器有非常旧的 shell 版本。长期以来,它一直是内置的bash。它可能比echo -e.

否则,真的没有办法获得echo它关心的选项。

编辑:从另一个类似问题的答案;printf通过使用这个方便的 no-digital-rights-retained 包装器来避免引用问题:

ech-o() { printf "%s\n" "$*"; }

(这是 ech-o,如“没有选项”)

于 2012-11-06T20:24:06.037 回答
4

如果在字符串前面加上一个字符(例如“x”),该字符会在运行时通过剪切被删除:

echo "x-n" | cut -c 2-
于 2012-11-06T21:13:45.533 回答
3

如果您使用该名称调用 Bash sh,它将模仿sh,其中该-n选项不可用echo。我不确定这是否符合您的需求。

$ /bin/sh -c 'echo -n'
于 2012-11-06T20:28:23.353 回答
3

echo "-n" 告诉 shell 把 '-n' 作为 echo 的第一个参数,一个字符一个字符。语义上,echo "-n"与 相同echo -n。试试这个(它是一个 POSIX 标准,应该在任何 shell 上工作):

printf '%s\n' "-n"
于 2012-11-06T21:19:45.463 回答
0

echo "-n"不会打印-n,因为-n它被解释为echo(请参阅help echo)的一个选项。但是你可以使用:

echo -e "\055n"
于 2014-05-16T16:57:48.770 回答
-1

作弊方法:

echo -e  "\r-n"
于 2014-08-07T11:56:50.720 回答