Linux備忘録11:ヒアドキュメント

ヒアドキュメントのメモ

 

【概要】
複数行の文字列を簡潔に記述するための機能。
シェルスクリプトの中にちょっとした別のスクリプトを埋め込むときに便利とのこと。
bashの他にも、C、C+、PerlPython等にも同じ機能がある

【ヒアドキュメントは標準入力として扱われる】※文字列リテラルではない
⇒echoで出力は出来ない
⇒標準出力する場合は引数無しのcatに渡して使用する。

 ※catへのリダイレクトは必ず追記:"<<”にする。

 

# 例) oracleDBのテーブル一覧を出力する
sqlplus -S user/pass@sid << EOS
set pagesize 0
set feedback off

select table_name from tabs
order by table_name;
EOS


【通常の利用方法】

cat << EOF
aaaaa
bbbbb
ccccc
EOF

※{EOF}はヒアドキュメントの範囲を示す区切り文字。任意の文字が指定可能。
※区切り文字の【次】の行からの内容がヒアドキュメントとして扱われる。

 

【ファイルの内容を連結して入力(リダイレクト)】

cat - << EOF test.txt > output.txt
aaaaa
bbbbb
EOS

 

catの直後-は、catの仕様として、ファイル名を指定すると標準入力から読み込まなくなるため、明示的に-を指定して、標準入力として渡したい箇所を指定。

 

""で括った文字列リテラルと同様、変数展開やコマンド置換が行われる。
その場合は区切り文字をシングルクォーテションで囲めば、変数展開等を抑止できる。

cat << 'EOF'
$MY_VAR と書いても展開されない
EOF

 

【行頭のタブを取り除く】

cat <<- EOF
<tab> hoge
<tab> fuga
<tab>EOF

※行頭の<tab>が取り除かれ、最終行のEOFが認識される。

 

【変数に代入する】

※ヒアドキュメントの終了文字{EOS}の直後に")"を記述するとエラーになる。

HOGE=$(cat << EOS
hoge
fuga
EOS
)