Shell
什麼時候應該使用 $( ) 來定義變數
我遇到的一些 shell 腳本在定義變數時使用以下語法:
file_list_1=$(echo "list.txt")
或者
file_list_2=$(find ./)
我會使用:
file_list_1="list.txt"
和
file_list_2=`find ./`
我不確定以上哪個更好或更安全。
x=$( )
設置變數時使用語法有什麼好處?
從手冊(
man bash
):
$(
命令)
或*命令*
Bash 通過執行命令並用命令的標準輸出替換命令替換來執行擴展,並刪除任何尾隨的換行符。嵌入的換行符不會被刪除,但它們可能會在分詞過程中被刪除。命令替換
$(cat
文件)
可以替換為等效但速度更快的$(<
文件)
。當使用舊式反引號形式的替換時,反斜杠保留其字面含義,除非後面跟著
$
,```或\
。前面沒有反斜杠的第一個反引號終止命令替換。使用$(
命令)
形式時,括號之間的所有字元組成命令;沒有人受到特殊對待。POSIX 標准定義了
$()
命令替換的形式。$()
允許嵌套命令並且看起來更好(易讀性)。它應該在所有Bourne shell上都可用。您可以閱讀更多關於 IEEE Std 1003.1, Shell Command Language, Section 2.6.3 Command Substitution的內容。
至少有一個 Unix,AIX,記錄了反引號已經過時了。從那個連結:
雖然反引號語法被 ksh 接受,但它被 X/Open Portability Guide Issue 4 和 POSIX 標準認為已過時。這些標準建議可移植應用程序使用 $(command) 語法。
但是,
/bin/sh
不一定要符合 POSIX。因此,正如@Jeight 指出的那樣,在現實世界中有時仍然存在反引號的情況。