首頁 > 軟體

shell中$後加引號有什麼用($「string」和$'string')

2020-06-16 16:54:50

有些時候在某些服務管理指令碼中看到$"$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@linuxidc ~]# echo 'anb'
anb
[root@linuxidc ~]# echo $'anb'
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

本文永久更新連結地址https://www.linuxidc.com/Linux/2018-02/151002.htm


IT145.com E-mail:sddin#qq.com