1. ホーム
  2. スクリプト・コラム
  3. リナックスシェル

Bashスクリプトでの括弧とバッククォートの使用について

2022-01-05 11:04:44

Bashスクリプトでは、変数やコマンド実行結果をファイル名やログの出力として参照する必要があることが多く、スクリプトやシェルでは、バッククォートや括弧()を使って変数の内容を取得することができます。


例1
日付の出力を取得する

echo `date`
# output
Tue, Jan 05, 2021 15:21:23 CST
echo $(date)
# output
Tue, Jan 05, 2021 15:21:32 CST

バッククォートやブラケットを使うことで、コマンドの出力をスクリプトの入力にしたり、コマンドのパラメータを使って出力をフォーマットすることができます。

例2

年-月-日のフォーマットで日付を取得する

echo `date +%F`
# output
2021-01-05
echo $(date +%F)
# output
2021-01-05

議論する

Bashでは、バッククォートと括弧はコマンドの入力を表すので、スクリプトでは、バッククォートと括弧を使ってコマンドの実行と出力を得ることしかできず、スクリプト内で宣言された変数は得られない。代わりに、$と${}を使って、スクリプトで宣言された変数を取得することができますが、コマンドの入力は取得できません。

#! /usr/bin/bash

variable=name

# use `` to output variable
echo `variable`

# use $ to output variable
echo $variable

# use $() to output variable
echo $(variable)

# use ${} to output variable
echo ${variable}

実行の結果、エラーが報告される

. /test:line 6: 変数: コマンドが見つかりませんでした。

名称

. /test:line 12: 変数: コマンドが見つかりませんでした。

名称

概要

1). (ポイント)ソースコマンドと同様に、ファイルに実行権限があるかどうかにかかわらず、ファイルからコマンドを読み込んで正しく実行します。また,実行のためにサブシェルを生成するのではなく,現在のシェルの下で実行される(通常,「. /filename.sh" を使ってファイルを実行するのは、現在のシェルの下にサブシェルを生成してそれを実行するためです)。

2): このコマンドは何もしませんが、実行後に正しい終了コード、つまりexit 0を返します(passと同様)。

3)() は複数のコマンドを組み合わせて実行するもので、コマンドグループに相当する。

4) {}も複数のコマンドをまとめるという点では、()と同様である。両者の違いは、()は結果のサブシェルで実行されるのに対し、{}は現在のシェルで実行される点です。

5) [] は、test コマンドと同様に、値の比較やファイルの種類のチェックに使用します。

6) [[]]は[]の「拡張」バージョンで、複数のテストコマンドでサポートされているテストを組み合わせることができる。

(7) (())は数値演算専用で、式の評価値が0の場合は終了ステータスを1、0以外の場合は0にする。

Bashスクリプトにおけるブラケットとバッククォートの使用については、この記事がすべてです。Bashのブラケットとバッククオートの詳細については、BinaryDevelopの過去の記事を検索するか、以下の関連記事を引き続きご覧ください。