#04 コマンド結果を文字列として取得する

コマンド出力結果をシェルスクリプト内で利用したい場合、コマンド置換機能を使用することでコマンド結果を文字列として取得することが可能となる。

例として今日の日付をdateコマンドで取得し、その日付のファイル名を取得するシェルスクリプトを作成する。

1.dateコマンド

dateコマンドを実行してみる。

$ date
以下のように現在日時が表示される。

2017年  7月 23日 日曜日 17:19:39 JST

2.日付を「YYYY-MM-DD」形式で表示させる

$ date '+%Y-%m-%d'
2017-07-23

3.シェルスクリプトを作成

上記より、コマンド「date ‘+%Y-%m-%d’」の結果をファイル名とするファイルを生成するシェルスクリプトを作成する。
Vimで「date.sh」というファイル名を作成、以下を記述、実行権限を付与する。

#!/bin/bash

filename=$(date '+%Y-%m-%d')
touch "$filename"

「date ‘+%Y-%m-%d’」を$()で囲むことでコマンドの結果を文字列として取得できる。
結果を変数「filename」に格納し、次行の「touch」コマンドでファイルを作成する。

これで同ディレクトリ内にシェルスクリプトを実行した日付(今回は2017-07-23)の名前のファイルが作成されていることが確認できる。

4.バッククォートで囲む方法

$()でコマンドを囲む代わりに、「`」(バッククォート)で囲んでも同様の結果となる。
バッククォートはキーボードの[@]のキーを[Shift]を押した状態で押下することで入力できる。

バッククォートを使用すると、上記のシェルスクリプトは以下のようになる。
実行結果は全く同じ。

#!/bin/bash

filename=`date '+%Y-%m-%d'`
touch "$filename"

分かりやすさという点からも$()を利用することが推奨される。

シェルスクリプト の一覧