コマンド出力結果をシェルスクリプト内で利用したい場合、コマンド置換機能を使用することでコマンド結果を文字列として取得することが可能となる。
例として今日の日付をdateコマンドで取得し、その日付のファイル名を取得するシェルスクリプトを作成する。
1.dateコマンド
dateコマンドを実行してみる。 [bash] $ date 以下のように現在日時が表示される。 [bash] 2017年 7月 23日 日曜日 17:19:39 JST [/bash]
2.日付を「YYYY-MM-DD」形式で表示させる
[bash] $ date '+%Y-%m-%d' [/bash] [bash] 2017-07-23 [/bash]
3.シェルスクリプトを作成
上記より、コマンド「date '+%Y-%m-%d'」の結果をファイル名とするファイルを生成するシェルスクリプトを作成する。 Vimで「date.sh」というファイル名を作成、以下を記述、実行権限を付与する。 [bash]
!/bin/bash
filename=$(date '+%Y-%m-%d') touch "$filename" [/bash]
「date '+%Y-%m-%d'」を$()で囲むことでコマンドの結果を文字列として取得できる。 結果を変数「filename」に格納し、次行の「touch」コマンドでファイルを作成する。
これで同ディレクトリ内にシェルスクリプトを実行した日付(今回は2017-07-23)の名前のファイルが作成されていることが確認できる。
4.バッククォートで囲む方法
$()でコマンドを囲む代わりに、「`」(バッククォート)で囲んでも同様の結果となる。 バッククォートはキーボードの[@]のキーを[Shift]を押した状態で押下することで入力できる。
バッククォートを使用すると、上記のシェルスクリプトは以下のようになる。 実行結果は全く同じ。 [bash]
!/bin/bash
filename=date '+%Y-%m-%d'
touch "$filename"
[/bash]
分かりやすさという点からも$()を利用することが推奨される。