在 Bash 中將變數設定為命令的輸出

Fumbani Banda 2023年1月30日
  1. Bash 中的命令替換
  2. Bash 命令輸出到變數
在 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
作者: Fumbani Banda
Fumbani Banda avatar Fumbani Banda avatar

Fumbani is a tech enthusiast. He enjoys writing on Linux and Python as well as contributing to open-source projects.

LinkedIn GitHub