以外的任何人都可以解釋什麼是他們似乎看起來是一樣的
echo $"Starting $CMD"
和
echo "String $CMD"
之間的差異。
以外的任何人都可以解釋什麼是他們似乎看起來是一樣的
echo $"Starting $CMD"
和
echo "String $CMD"
之間的差異。
$""
是一種用於語言翻譯的引用形式。如果你用-D
標誌調用bash,它將打印出所有這樣的字符串。當區域設置爲C
或POSIX
時,這種引用形式不會執行任何操作。
這些字符串被gettext
用來查找合適的翻譯。例如,如果你的腳本有串$"Hello, World"
,你已經正確安裝MO文件翻譯該字符串到,比如說,法國,你可以執行你的腳本是這樣的:
LANGUAGE=fr_FR ./yourscript
和期望的$"Hello, World"
所有實例是輸出爲Bonjour,Tout le Monde(假設這是您的翻譯文件中的實際內容)。
翻譯不是魔術或自動翻譯,所以you must provide the translation engine with whatever translation strings it doesn't already have。
(PS - 我掛不提this security bug,但如果你撇去你可能會錯過它,所以我選中它再次蒞臨指導。)
中查找bash
手冊頁的QUOTING
部分:
專門處理表格
$'string'
的單詞。該字擴展爲 字符串,反斜槓轉義字符被替換爲 ANSI C標準中指定的字符。反斜槓轉義序列,如果存在的話,被譯碼爲 如下:
- \一個警報(鐘形)
- \ b退格
- 。\ E轉義字符
- \ f換
- \ n新行
- \ r回車
- \ t水平標籤
- \ v垂直的iCal標籤
- \反斜槓
- \」單引號
- \ NNN的八位字符,其值是八進制值NNN(一到三位)
- \ XHH的八位字符,其值是十六進制值HH(一個或兩個十六進制數字)
- \ CX控制-X字符
膨脹的結果是單引號,彷彿美元符號不在場。通過
$
之前($"string"
)
,並注意如下描述雙引號中的字符串:
雙引號字符串用一個美元符號($)開頭將導致串 根據翻譯當前的語言環境。如果當前區域設置爲C 或POSIX,則忽略美元符號。如果翻譯字符串並替換 ,則替換爲雙引號。
你能給我一些樣品嗎? – 2012-08-07 05:05:59
@愛國者編輯舉例 – kojiro 2012-08-07 11:32:16
對不起,'LANGUAGE = fr_FR。/ myscrip.sh'會打印'Hello,world'。它需要爲我的Linux做一些配置嗎? – 2012-08-07 13:34:56