2012-11-06 71 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

......如果你的輸出是供人類消費的話,那麼它就行得通,但如果它被程序或其他非終端消費者閱讀,則不會。 –