シェル ヒア・ドキュメント Here Documents 1
あるコマンドに渡すキーボードからの入力文字列を、そのコマンドの直後に指定することができます。
標準入力用のファイルを用意し、リダイレクト機能でそのファイルから読み込ませるという方法では、ファイルを別個に用意しなくてはなりませんし、リダイレクトの書き方を誤って(スペースのありなしや&の書き忘れ)しまうこともあります。
1つのシェルスクリプトの中に、入力する文字も同時に書いてしまえればファイルは1つですみますし、リダイレクトを番号で操作したりするよりわかりやすくなります。
そういう書き方をヒア・ドキュメントといいます。
書き方例
<<word
wordという部分にはどのような言葉(文字)を使ってもかまいません
この場合、このあとwordという言葉が「行頭に、しかもその一語だけの行として出てくるまでの間に書かれたテキストがすべての標準入力からのものとして処理されます。
「ここまでの入力のデータとして扱う」の意味をできるだけ明示的にするためにwordの部分にはEOFやENDという言葉が使われます
command << END
・・・・・・・・
・・・・・・・・
END
こうかくと、・・・・・の部分が command の入力として扱われます。
cat コマンドについて考察します。引数にファイル名が指定されていればそのまま画面に
出力します(標準出力)。catコマンドに引数が何もない場合には、標準入力から入力を読み取り、
キーボードから ^D(Ctrl+D)が入力されるまで入力されたものをそのまま表示します
[root@localhost sh]# cat ←引数なし
This is a ←入力
This is a ←そのまま表示された
input data. ←入力
input data. ←そのまま表示された この直後 CTRL+Dキー入力で戻る
[root@localhost sh]#
これを、<<を使用してみます。
[root@localhost sh]# cat << END
> This is a
> hire document.
> END
This is a
hire document.
<<のあとに指定した文字列が現れるまでが、コマンドの入力として扱えます。
ここで、入力データの中に、$が入っていると・・・
[root@localhost sh]# cat << END
> This is a
> here $DOC.
> END
This is a
here .
$DOCという変数として処理してしまいます。$DOCにはなにも設定されていませんので空白つぎの.(ピリオド)だけがむなしく表示されます。
次のように変数に値をセットしておけば、その値に変換されて出力されます。
[root@localhost sh]# DOC=document
[root@localhost sh]# cat << END
> This is a
> here $DOC.
> END
This is a
here document.
次のようにバックスラッシュで(\)「ろ」のキーでクォートすれば変数にならずに処理できます。
[root@localhost sh]# DOC=document
[root@localhost sh]# cat << \END
> This is a
> here $DOC.
> END
This is a
here $DOC.
もちろんその変数だけをクォートしてもかまいませんが全体をクォートしてしまう前者のほうがおすすめです。
シングルクォーテーションで囲っても同じ効果があります。
[root@localhost sh]# DOC=document
[root@localhost sh]# cat << 'END'
> This is a
> here $DOC.
> END
This is a
here $DOC.
テーマ:UNIX/Linux - ジャンル:コンピュータ
★CentOS7 まとめ
★Ubuntu14 まとめ
★Ubuntu12用無線アダプタ紹介
★Ubuntu12 まとめ
★Server 2008R2 まとめ
★SCCM2012R2 まとめ
★Windows10 アップグレード
★Windows7 まとめ
★Windows7 SSD まとめ
★Windows8 まとめ
★EaseUS Todo Backup Server
★Linux Destbision まとめ
★Linuxコマンド関連Index
★Zorin8.1まとめ
★Fedora17まとめ
★Fedora15まとめ
☆VB Script まとめ
★USB3.0で快適バックアップ
★リンク集・メール
・はじめての自宅サーバ構築 - Fedora/CentOS -
SCCM Backup 遠隔操作 VirtualBox FeliCaポート/パソリ ESXi
<%plugin_third_description>
<%plugin_third_content><%plugin_third_description2>