2012-11-06 70 views
11

非常相似to this questionecho“-n”不会打印-n?

我在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”?

+1

而问题是什么? – choroba

+0

我的不好,留在标题中。添加到最后一行。 – MrDoom

+0

切线相关,http://everything2.com/title/The+UNIX+and+the+Echo – tripleee

回答

8

printf应该是你的所有shell中内置的,除非你的某些机器有很老的shell版本。长期以来,它一直是bash的内置组件。这可能比echo -e更便携。

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

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

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

(这是ECH-O,如“不带选项”)

+1

printf比echo更方便,但一定要将想要打印的字符串作为参数传递,* not *作为格式字符串(即'printf'%s \ n“”$ stringtoprint“'而不是'printf”$ stringtoprint \ n“') - 请参阅@ djhaskin987的答案。 –

+0

@GordonDavisson:我从我的另一个答案中自我增添了一个注释,我认为这是一个很好的解决方案。 – rici

+3

哈! +1为实际适当使用'“$ *”' –

2

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

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

在POSIX.2 shell命令规范中没有指定'-n'就完全不正确。 '-n'的选项(非字符串)行为被指定为'echo'的基准(non-XSI)标准行为的一部分;只有在实现可选XSI扩展的shell中不存在。请参阅http://pubs.opengroup.org/onlinepubs/009604599/utilities/echo.html - 现在,授予,_your_'/ bin/sh'可以遵循XSI,但这不是普遍保证的。 –

4

什么用(例如“X”)字符前缀字符串已移除的有切口上即时:

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

回声“-n”壳告诉给把'-n'作为回声的第一个参数,角色是角色。从语义上讲,echo "-n"echo -n相同。试试这个(这是一个POSIX标准,并应在任何壳工作):

printf '%s\n' "-n" 
1

echo "-n"将不打印-n因为-n被解释为echo一个选项(参见help echo)。但是你可以使用:

echo -e "\055n" 
+0

GNU的'echo'实现支持这个功能,但不支持任何符合POSIX的版本 - 一个符合XSI标准的'echo'POSIX实现将会打印文字'-e',非XSI则不会打印解释'\ 055'。事实上,如果你在GNU系统上导出POSIXLY_CORRECT = 1,你会看到前一个行为。 –

0

作弊方法:

echo -e "\r-n" 
+0

......如果你的输出是供人类消费的话,那么它就行得通,但如果它被程序或其他非终端消费者阅读,则不会。 –