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