bash で「cat << EOF」はどのように機能しますか? 質問する

bash で「cat << EOF」はどのように機能しますか? 質問する

プログラムに複数行の入力を行うためのスクリプトを作成する必要がありました ( psql)。

少しグーグルで検索してみたところ、次の構文が機能することがわかりました。

cat << EOF | psql ---params
BEGIN;

`pg_dump ----something`

update table .... statement ...;

END;
EOF

これにより、複数行の文字列 ( から までBEGIN;END;含む) が正しく構築され、 への入力としてパイプされますpsql

しかし、それがどのように/なぜ機能するのか全く分かりません。誰か説明してもらえませんか?

私が主に言及しているのはcat << EOF>ファイルへの出力、>>ファイルへの追加、<ファイルからの入力の読み取りです。

具体的に何をするのでしょうか<<?

それに関するマニュアルページはありますか?

ベストアンサー1

このcat <<EOF構文は、Bash で複数行のテキストを操作する場合、たとえば、複数行の文字列をシェル変数、ファイル、またはパイプに割り当てる場合に非常に便利です。

cat <<EOFBash での構文の使用例:

1. 複数行の文字列をシェル変数に割り当てる

$ sql=$(cat <<EOF
SELECT foo, bar FROM db
WHERE foo='baz'
EOF
)

変数$sqlには改行文字も含まれるようになりました。 を使用して確認できますecho -e "$sql"

2. Bashで複数行の文字列をファイルに渡す

$ cat <<EOF > print.sh
#!/bin/bash
echo \$PWD
echo $PWD
EOF

ファイルprint.shには次の内容が含まれます:

#!/bin/bash
echo $PWD
echo /home/user

3. Bashで複数行の文字列をパイプに渡す

$ cat <<EOF | grep 'b' | tee b.txt
foo
bar
baz
EOF

ファイルには 行と行がb.txt含まれています。同じ出力が に印刷されます。barbazstdout

おすすめ記事