首先,讓我們瞭解如何引用作品。
最簡單的引用形式是反斜槓:它可以防止以任何特殊方式解釋下列字符,從而允許將其用作文字字符。例如:
# Two arguments to printf
$ printf '%s\n' a b
a
b
# One three-character argument to printf
printf '%s\n' a\ b
a b
雙引號相當於逃脫的每一個字符包含在其中:"a b c"
相當於\a\ \b\ \c
,這是一樣的a\ b\ c
因爲a
,b
和c
沒有特殊的意義,開始與。爲被字面上治療,但下列情況除外你能想到的雙引號內的每個字符:
$
可以啓動參數擴展或命令替換。用反斜槓將其轉義處理。
$ foo=3
$ echo "$foo"
3
$ echo "\$foo"
$foo
甲反引號開始命令替換。用反斜槓將其轉義處理。
$ echo "`pwd`"
/home/me
$ echo "\`pwd\`"
`pwd`
雙引號結尾引用的字符串。用反斜槓將其轉義處理。
$ echo "\""
"
由於反斜槓可能是前三個序列之一的一部分,逃生它用反斜線治療一種字面。
$ echo "\\"
\
內單引號,一切都從字面上治療,包括任何使用反斜槓的。 (這樣的後果之一是,它是不可能把一個單引號在單引號字符串,因爲它總是會終止這樣的字符串。)
$ echo '\'
\
一旦你瞭解報價,接下來您需要要意識到printf
本身可以處理它在第一個參數中看到的任何反斜槓。
$ printf 'a\x20b\n' # a, space (ASCII 0x20), b, newline
a b
爲了確保一個字符串字面印刷無論什麼字符都存在,使用%s
格式說明,並通過您的字符串作爲第二個參數:
$ printf '\x41\n'
A
$ printf '%s\n' '\x41'
\x41
使用雙引號*在格式字符串本身*是不好的做法,缺乏一個非常有說服力的理由。一般來說,格式字符串應該是一個常量,任何替換都應該被參數化。 –