Bash でコマンドの出力に変数を設定する

Fumbani Banda 2023年1月30日
  1. Bash でのコマンド置換
  2. Bash コマンドの変数への出力
Bash でコマンドの出力に変数を設定する

このチュートリアルでは、コマンド置換を使用して、コマンドの出力を bash の変数に割り当てる方法を示します。

Bash でのコマンド置換

コマンド置換は、Linux コマンドを実行し、コマンドの出力を bash 変数に格納できるようにする bash 機能です。コマンド置換構文を使用してコマンドが実行されると、コマンドの標準出力がコマンドを置き換え、末尾の改行が削除されます。

コマンド置換では、2つの異なる構文を使用して、コマンド出力を変数に格納します。

最初の構文タイプは、以下に示すように、コマンドを括弧内に配置し、先頭に $ 記号を追加します。

括弧内のすべての文字は、コマンドの一部として扱われます。

output=$(command)
output=$(command argument-1)
output=$(/path/to/command)
output=$(/path/to/command argument-1)

2 番目のタイプの構文では、コマンドの前後にバッククォートを使用します。

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

以下では、backticks 構文を使用します。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 スクリプトは、backticks 構文を使用して 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

関連記事 - Bash Output