シェルスクリプトでは、データはキーボードから入力するかデータファイルを読み込ませるのが通常です。しかしデータはシェルスクリプトに直接書き込むという方法もあります。
ヒアドキュメントという機能を使うことで、本来ならデータを格納したファイル名を記述する場所に、データを直接書き込んでしまうというものです。
まずは、サンプルを実行してみます。
#!/bin/sh uniq -d <<string1 aaa aaa bbb ccc ddd ddd string1
実行結果
aaa ddd
uniqは、連続する複数の同じ内容の行があれば、ひとつの行に縮めて出力するコマンドです。上記サンプルでは、uniqコマンドに対してヒアドキュメントにより、シェルスクリプト上に記述したデータを渡しています。
- ヒアドキュメントの書式
-
コマンド >>文字列
データ
文字列
最初の文字列と最後の文字列は、ヒアドキュメントの初めと終わりの識別子となるため、完全に同じでなければなりません。同じであれば、文字列は何でも良いです。
ヒアドキュメントを使うことで、シェルスクリプト上にデータを書き込むことができるので、シェルスクリプトとデータファイルを一体化することができます。
ただ、本来、プログラムとデータファイルは分離するのが一般的です。シェルスクリプトに限らず、ソースコード上にデータを直接記述することを「ハードコーティング」などと言いますが、これは推奨されず、良くないコードの典型とされています。
その理由として、例えば、同じプログラムで別のデータを使いたくなった場合は、プログラムそのものを修正しないといけません。逆に、同じデータを別のプログラムで使いたい場合も、もう一度同じデータを記述しないといけません。
コンパイル型の言語で作成したプログラムの場合は特に、ほんの少しのプログラム修正でも、それによる影響範囲はものすごく大きくなるため、プログラムとデータを分離するという考え方は必須と言えます。
シェルスクリプトの場合は、小規模なプログラムとなることが多く、扱うデータも多くないことが多いと言えます。また、決まった目的で使用するプログラムの場合、扱うデータが決まっており、変更することがないことはわかっていれば、プログラムとデータを分離することにこだわる必要はありません。むしろ、スクリプトの可読性が高くなるメリットもあります。
要は、ヒアドキュメントを使うか、データファイルとして分離させ、リダイレクトで読み込むかは、目的にあった方法を選べば良いでしょう。