在 Bash 中將變數設定為命令的輸出
本教程演示了使用命令替換將命令的輸出分配給 bash 中的變數。
Bash 中的命令替換
命令替換是一個 bash 功能,它使我們能夠執行 Linux 命令並將命令的輸出儲存在 bash 變數中。使用命令替換語法執行命令後,該命令的標準輸出將替換該命令,並刪除任何尾隨換行符。
命令替換使用兩種不同的語法將命令輸出儲存到變數中。
第一種語法型別將命令放在括號內,並在開頭新增 $
符號,如下所示。
括號內的每個字元都被視為命令的一部分。
output=$(command)
output=$(command argument-1)
output=$(/path/to/command)
output=$(/path/to/command argument-1)
第二種語法在命令周圍使用反引號。
output=`command`
output=`command argument-1`
output=`/path/to/command`
output=`/path/to/command argument-1`
Bash 命令輸出到變數
我們使用以下示例來演示 bash 指令碼中的命令替換。
下面,我們在開頭使用括號和美元符號的第一種語法。whoami
命令被執行,輸出替換命令,然後分配給 user
變數。我們使用 echo
命令將訊息顯示到標準輸出。
user=$(whoami)
echo "The logged in user is $user"
執行此指令碼會顯示以下輸出。
The logged in user is delftstack
下面,我們使用反引號語法。whoami
命令的輸出分配給 user
變數,echo
用於將訊息列印到終端。
user=`whoami`
echo "The logged in user is $user"
執行指令碼會顯示以下輸出。
The logged in user is delftstack
在下面的指令碼中,我們使用 ls
使用括號和美元符號語法列出 delftstack
資料夾的內容。ls
命令的輸出分配給 files
變數。echo
命令用於將 files
變數的內容列印到終端。
files=$(ls -l delftstack)
echo "$files"
執行指令碼會將以下輸出列印到標準輸出。
total 4
-rw-r--r-- 1 fumba fumba 752 Nov 17 12:51 directory.sh
-rw-r--r-- 1 fumba fumba 79 Nov 19 13:11 foo1.sh
drwxr-xr-x 1 fumba fumba 4096 Nov 22 13:57 part
-rw-r--r-- 1 fumba fumba 213 Nov 21 21:10 regex.sh
下面的 bash 指令碼使用反引號語法將 ls
命令的輸出分配給 files
變數,echo
命令用於將 files
變數的內容列印到標準輸出。
files=`ls -l delftstack`
echo "$files"
執行指令碼會顯示以下輸出。
total 4
-rw-r--r-- 1 fumba fumba 752 Nov 17 12:51 directory.sh
-rw-r--r-- 1 fumba fumba 79 Nov 19 13:11 foo1.sh
drwxr-xr-x 1 fumba fumba 4096 Nov 22 13:57 part
-rw-r--r-- 1 fumba fumba 213 Nov 21 21:10 regex.sh
我們使用以下語法將多行命令分配給 bash 指令碼中的變數。
variable_name=$(command \
argument 1 \
argument 2 \
argument 3)
下面的 bash 指令碼演示了將多行命令的輸出分配給變數。ls
命令列出當前資料夾的所有內容,並將輸出通過管道傳送到 head
命令。head
命令僅從 ls
中選擇輸入的前 5
行並將輸出通過管道傳輸到 grep
命令。grep
命令匹配帶有單詞 flow
的行並將其列印到標準輸出。
files=$(ls -l \
| \
head -5 \
| grep -i "flow")
echo $files
執行指令碼會顯示以下輸出。
drwxr-xr-x 1 fumba fumba 4096 Sep 30 09:29 airflow