Bash
ここでの文書とここでの文字列
サーチ…
ここにインデントする文書
ここでタブ内のテキストをインデントすることができます。 <<-
代わりに<<
<<-
リダイレクション演算子を使う必要があります:
$ cat <<- EOF
This is some content indented with tabs `\t`.
You cannot indent with spaces you __have__ to use tabs.
Bash will remove empty space before these lines.
__Note__: Be sure to replace spaces with tabs when copying this example.
EOF
This is some content indented with tabs _\t_.
You cannot indent with spaces you __have__ to use tabs.
Bash will remove empty space before these lines.
__Note__: Be sure to replace spaces with tabs when copying this example.
これの実用的な使用例( man bash
言及されているように)はシェルスクリプトにあります。
if cond; then
cat <<- EOF
hello
there
EOF
fi
読みやすくするために、このif
文のようにコードブロック内の行をインデントするのが通例です。 <<-
演算子の構文がなければ、次のように上記のコードを書く必要があります:
if cond; then
cat << EOF
hello
there
EOF
fi
それは読みにくいですし、より複雑な現実的なスクリプトではさらに悪化します。
ここでは文字列
このような文字列を使ってコマンドを送ることができます:
$ awk '{print $2}' <<< "hello world - how are you?"
world
$ awk '{print $1}' <<< "hello how are you
> she is fine"
hello
she
また、ここの文字列でwhile
ループをフィードすることもできます:
$ while IFS=" " read -r word1 word2 rest
> do
> echo "$word1"
> done <<< "hello how are you - i am fine"
hello
文字列を制限する
heredocは、 リミットストリングを使用して、消費する入力をいつ停止するかを決定します。終了制限文字列は必須です
- 行頭にいてください。
- 行の唯一のテキストです。 注:
<<-
を使用すると、リミットストリングの先頭にタブ\t
付けることができます
正しい:
cat <<limitstring
line 1
line 2
limitstring
これは出力されます:
line 1 line 2
不適切な使用:
cat <<limitstring
line 1
line 2
limitstring
最後の行のlimitstring
に正確にはないので、シェルはlimitstring
で始まり、他に何もlimitstring
ていない行を見るまで、さらに入力を待つことになります。それだけで入力を待つのをやめ、here-documentをcat
コマンドに渡します。
初期制限文字列の先頭にハイフンを付けると、解析の前に行頭のタブが削除されるので、データと制限文字列をタブでインデントすることができます(シェルスクリプトの読みやすさのため)。
cat <<-limitstring
line 1 has a tab each before the words line and has
line 2 has two leading tabs
limitstring
生産する
line 1 has a tab each before the words line and has line 2 has two leading tabs
先頭のタブ(内部タブではない)を削除します。
ファイルを作成する
このドキュメントの古典的な使い方は、コンテンツを入力してファイルを作成することです。
cat > fruits.txt << EOF
apple
orange
lemon
EOF
ここの文書は<< EOF
とEOF
間の行です。
この文書はcat
コマンドの入力となります。 cat
コマンドは単に入力を出力し、出力リダイレクション演算子を使用して>
fruits.txt
ファイルにリダイレクトします。
その結果、 fruits.txt
ファイルには次の行が含まれます。
apple
orange
lemon
出力リダイレクションの通常の規則が適用されます: fruits.txt
が以前に存在しなかった場合、それが作成されます。前に存在していた場合、切り詰められます。
ここの文書でコマンドを実行する
ssh -p 21 [email protected] <<EOF
echo 'printing pwd'
echo "\$(pwd)"
ls -a
find '*.txt'
EOF
$
は現在のシェルによって展開されないようにエスケープされます。つまり、 $(pwd)
はリモートシェルで実行されます。
別の方法:
ssh -p 21 [email protected] <<'EOF'
echo 'printing pwd'
echo "$(pwd)"
ls -a
find '*.txt'
EOF
注 :閉じるEOFは、行の先頭にある必要があります(前に空白はありません)。インデントが必要な場合は、 <<-
使用してheredocを開始するとタブが使用されます。詳細については、 ここにある文書のインデントと文字 列の 制限の例を参照してください。
sudoでいくつかのコマンドを実行する
sudo -s <<EOF
a='var'
echo 'Running serveral commands with sudo'
mktemp -d
echo "\$a"
EOF
-
$a
は現在のシェルで展開されないようにエスケープ$a
必要があります
または
sudo -s <<'EOF'
a='var'
echo 'Running serveral commands with sudo'
mktemp -d
echo "$a"
EOF