首页 > 代码库 > bash重谈:Quoting

bash重谈:Quoting

3.1.2 Quoting
-------------

* Menu:

* Escape Character:: How to remove the special meaning from a single
character.
* Single Quotes:: How to inhibit all interpretation of a sequence
of characters.
* Double Quotes:: How to suppress most of the interpretation of a
sequence of characters.
* ANSI-C Quoting:: How to expand ANSI-C sequences in quoted strings.
* Locale Translation:: How to translate strings into different languages.

Quoting is used to remove the special meaning of certain characters
or words to the shell. Quoting can be used to disable special
treatment for special characters, to prevent reserved words from being
recognized as such, and to prevent parameter expansion.

Each of the shell metacharacters (*note Definitions::) has special
meaning to the shell and must be quoted if it is to represent itself.
When the command history expansion facilities are being used (*note
History Interaction::), the HISTORY EXPANSION character, usually `!‘,
must be quoted to prevent history expansion. *Note Bash History
Facilities::, for more details concerning history expansion.

There are three quoting mechanisms: the ESCAPE CHARACTER, single
quotes, and double quotes.

File: bash.info, Node: Escape Character, Next: Single Quotes, Up: Quoting

3.1.2.1 Escape Character
........................

A non-quoted backslash `\‘ is the Bash escape character. It preserves
the literal value of the next character that follows, with the
exception of `newline‘. If a `\newline‘ pair appears, and the
backslash itself is not quoted, the `\newline‘ is treated as a line
continuation (that is, it is removed from the input stream and
effectively ignored).

File: bash.info, Node: Single Quotes, Next: Double Quotes, Prev: Escape Character, Up: Quoting

3.1.2.2 Single Quotes
.....................

Enclosing characters in single quotes (`‘‘) preserves the literal value
of each character within the quotes. A single quote may not occur
between single quotes, even when preceded by a backslash.

File: bash.info, Node: Double Quotes, Next: ANSI-C Quoting, Prev: Single Quotes, Up: Quoting

3.1.2.3 Double Quotes
.....................

Enclosing characters in double quotes (`"‘) preserves the literal value
of all characters within the quotes, with the exception of `$‘, ``‘,
`\‘, and, when history expansion is enabled, `!‘. The characters `$‘
and ``‘ retain their special meaning within double quotes (*note Shell
Expansions::). The backslash retains its special meaning only when
followed by one of the following characters: `$‘, ``‘, `"‘, `\‘, or
`newline‘. Within double quotes, backslashes that are followed by one
of these characters are removed. Backslashes preceding characters
without a special meaning are left unmodified. A double quote may be
quoted within double quotes by preceding it with a backslash. If
enabled, history expansion will be performed unless an `!‘ appearing in
double quotes is escaped using a backslash. The backslash preceding
the `!‘ is not removed.

The special parameters `*‘ and `@‘ have special meaning when in
double quotes (*note Shell Parameter Expansion::).

File: bash.info, Node: ANSI-C Quoting, Next: Locale Translation, Prev: Double Quotes, Up: Quoting

3.1.2.4 ANSI-C Quoting
......................

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‘
an escape character (not ANSI C)

`\f‘
form feed

`\n‘
newline

`\r‘
carriage return

`\t‘
horizontal tab

`\v‘
vertical tab

`\\‘
backslash

`\‘‘
single 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)

`\cX‘
a control-X character

The expanded result is single-quoted, as if the dollar sign had not
been present.

File: bash.info, Node: Locale Translation, Prev: ANSI-C Quoting, Up: Quoting

3.1.2.5 Locale-Specific Translation
...................................

A double-quoted string preceded by a dollar sign (`$‘) 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.

Some systems use the message catalog selected by the `LC_MESSAGES‘
shell variable. Others create the name of the message catalog from the
value of the `TEXTDOMAIN‘ shell variable, possibly adding a suffix of
`.mo‘. If you use the `TEXTDOMAIN‘ variable, you may need to set the
`TEXTDOMAINDIR‘ variable to the location of the message catalog files.
Still others use both variables in this fashion:
`TEXTDOMAINDIR‘/`LC_MESSAGES‘/LC_MESSAGES/`TEXTDOMAIN‘.mo.

bash重谈:Quoting