サーチ…


ここにインデントする文書

ここでタブ内のテキストをインデントすることができます。 <<-代わりに<< <<-リダイレクション演算子を使う必要があります:

$ 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

それは読みにくいですし、より複雑な現実的なスクリプトではさらに悪化します。

ここでは文字列

2.05b

このような文字列を使ってコマンドを送ることができます:

$ 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

ここの文書は<< EOFEOF間の行です。

この文書は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


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow