echo“-n”不会打印-n?

时间:2012-11-06 20:14:39

标签: bash echo

非常相似to this question

我正在使用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

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

6 个答案:

答案 0 :(得分:8)

printf应该是所有shell中的内置函数,除非您的某些机器具有非常旧的shell版本。它已经在bash内置了很长时间。它可能比echo -e更便携。

否则,我们无法获得它所关心的echo个选项。

修改:从an answer到另一个类似的问题;通过使用这个方便的无数字版权保留包装器来避免引用printf的问题:

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

(那是' s"没有选项")

答案 1 :(得分:4)

如何为字符串添加一个字符(例如“x”),并使用剪切即时删除:

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

答案 2 :(得分:3)

echo“-n”告诉shell将'-n'作为echo的第一个参数,即character的字符。从语义上讲,echo "-n"echo -n相同。试试这个(它是一个POSIX标准,应该适用于任何shell):

printf '%s\n' "-n"

答案 3 :(得分:2)

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

$ /bin/sh -c 'echo -n'

答案 4 :(得分:0)

echo "-n"将无法打印-n,因为-n被解释为echo的选项(请参阅help echo)。但你可以使用:

echo -e "\055n"

答案 5 :(得分:-1)

作弊方法:

echo -e  "\r-n"