お兄ちゃん!
出力リダイレクトには
>
と >>
があったけど
入力リダイレクトって <
だけなのかな?
<<
とかあってもよいんじゃないかなと思ったの
実は 「ヒアドキュメント(here document)」
と呼ばれているよ
<<
という
リダイレクト記号があるよ
でも >>
のように追記の意味はないんだ
これは
リダイレクトが便利だったので
ヒアドキュメントも
きっと役に立ちそうだね!
ヒアドキュメントは
複数行のテキストを
そのままコマンドの入力として
渡せる仕組みなんだ
へぇ…
それってどうやるのかな?
以下を入力してみよう!
cat << EOF
cat
は> ▌
あれ?いつものプロンプト
$
じゃなくて代わりに >
が出てきたよ!これはまだコマンドが完了しておらず入力を待っている状態を表しているよ
>
に続けて好きな内容を何行か入力してみてこんな感じ?
> まいやひ
> まいやふ
> まいやほ
いい感じだね!
最後に入力の終わりを示す
EOF
を入れようEOF
とだけ入力したら Enter だよ!> EOF
ここで Enter っと!
まいやひ
まいやふ
まいやほ
おおっ!これまで入力した内容がそのまま出力されたよ!まるで
echo
の複数行版みたいだね!ヒアドキュメントは 「終了を表す文字列」を指定することで その文字列が出るまでの全ての行をコマンドの入力として扱うんだよ
<<
の後にところで
EOF
ってどういう意味なのかな?EOF
はEOI
(End Of Input) や END
を使う人も多いよなるほど!「終了を表す文字列」にできるんだね
EOF
に限らず好きな文字列をヒアドキュメントの内容は「ダブルクォート( で クォートしたような扱いになるよ
"
)」以下のようにすることでヒアドキュメントの内容を「きつく」クォートできるんだ
cat << \EOF
...
EOF
cat << 'EOF'
...
EOF
へぇ!逆にいうとこの書き方をしなければ大部分の特別な記号はそのままの意味を持つんだね
それが便利な場合もあるけど不都合ならクォートしてそのままの内容を出力させよう
じゃあちょっと発展的な使い方をしてみようか
ヒアドキュメントを使って入力を作りつつ出力をリダイレクトしてファイルに保存してみよう
以下をそのまま入力してみてね
cat > my-song << EOF
まいやひ
まいやふ
まいやほ
EOF
わかったやってみるね!
そうしたら
my-song
の中身を確認しようcat my-song
どうなるんだろうね?
まいやひ
まいやふ
まいやほ
…すごい!
my-song
ファイルにヒアドキュメントの3行が保存されている!これ…エディタなしで簡単にテキストファイルが作れちゃんだね!
ヒアドキュメントは手軽にテキストを扱いたい時に便利だよ
>
の代わりに >>
として追記でもできるんだよね?もちろん!
入力が1行の場合「ヒアストリング(here string)」 を使うと便利なんだ書き方はこうだよ
コマンド <<< 文字列
1行入力に特化したヒアドキュメントという感じだね「終了を表す文字列」の指定もいらないし こっちで書ける場合は記述が少なくて見やすいね!
今回はヒアドキュメントとヒアストリングの使い方を学んだよ!
ヒアドキュメントやヒアストリングは簡単にコマンドの入力を生成できる便利な記述だよこれを覚えておけば操作の幅がもっと広がるよ!