bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html
有些時候在某些服務管理腳本中看到$"$string"或$"string",經過一些測試,又發現引號外面的$有和沒有是一樣的。一直也沒去找究竟,剛才有人問了我,於是就去翻了下man bash,找到了解釋。
(1).如果沒有特殊定制bash環境或有特殊需求,$"string"和"string"是完全等價的,使用$""只是為了保證本地化。
以下是man bash關於$""的解釋:
A double-quoted string preceded by a dollar sign ($"string") will cause the string to be translated according to the current locale. If the current locale is C or POSIX, the dollar sign is ignored. If the string is translated and replaced, the replacement is double-quoted.
(2).還有$后接單引號的$'string',這在bash中被特殊對待:會將某些反斜線序列(如\n,\t,\",\'等)繼續轉義,而不認為它是字面符號(如果沒有$符號,單引號會強制將string翻譯為字面符號,包括反斜線)。簡單的例子:
[root@xuexi ~]# echo 'a\nb' a\nb [root@xuexi ~]# echo $'a\nb' a b
以下是man bash里關於$'的說明:
Words of the form $'string' are treated specially. The word expands to string, with backslash-escaped characters replaced as specified by the ANSI C standard. Backslash escape sequences, if present, are decoded as follows: \a alert (bell) \b backspace \e \E an escape character \f form feed \n new line \r carriage return \t horizontal tab \v vertical tab \\ backslash \' single quote \" double quote \nnn the eight-bit character whose value is the octal value nnn (one to three digits) \xHH the eight-bit character whose value is the hexadecimal value HH (one or two hex digits) \uHHHH the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHH (one to four hex digits) \UHHHHHHHH the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHHHHHH (one to eight hex digits) \cx a control-x character