Shell Here String(內嵌字串)

2020-07-16 10:04:46
Here String 是 Here Document 的一個變種,它的用法如下:

command <<< string

command 是 Shell 命令,string 是字串(它只是一個普通的字串,並沒有什麼特別之處)。

這種寫法告訴 Shell 把 string 部分作為命令需要處理的資料。例如,將小寫字串轉換為大寫:
[[email protected] ~]$ tr a-z A-Z <<< one
ONE
Here String 對於這種傳送較短的資料到進程是非常方便的,它比 Here Document 更加簡潔。

雙引號和單引號

一個單詞不需要使用引號包圍,但如果 string 中帶有空格,則必須使用雙引號或者單引號包圍,如下所示:
[[email protected] ~]$ tr a-z A-Z <<< "one two three"
ONE TWO THREE

雙引號和單引號是有區別的,雙引號會解析其中的變數(當然不寫引號也會解析),單引號不會,請看下面的程式碼:
[[email protected] ~]$ var=two
[[email protected] ~]$ tr a-z A-Z <<<"one $var there"
ONE TWO THERE
[[email protected] ~]$ tr a-z A-Z <<<'one $var there'
ONE $VAR THERE
[[email protected] ~]$ tr a-z A-Z <<<one${var}there
ONETWOTHERE

有了引號的包圍,Here String 還可以接收多行字串作為命令的輸入,如下所示:
[[email protected] ~]$ tr a-z A-Z <<<"one two there
> four five six
> seven eight"
ONE TWO THERE
FOUR FIVE SIX
SEVEN EIGHT

總結

與 Here Document 相比,Here String 通常是相當方便的,特別是傳送變數內容(而不是檔案)到像 grep 或者 sed 這樣的過濾程式時。