1

これは、ヒアドキュメントのコンテンツを変数に割り当てる1つの方法です。ただし、実行すると、理由を指定せずにステータス1が返されます。

#! /bin/bash
# set -e -x

# This implementation returns 1
define(){ IFS='\n'; read -r -d '' ${1}; }
define thedoc <<'EOF'
Here is my here doc.
There was an ASCII banana here too,
but `read` would just it concatenate to mush.
EOF
# The here document will print with the following when `set -e` in not invoked.
echo $thedoc

set -eオフになっている場合は、検査と実行によってすべてがチェックアウトされます。これは上記のバナナだけではありませんが、上記で作成されたヒアドキュメントdefine()です。そのエラーはどこから発生しますか?

4

1 に答える 1

3

null文字列を区切り文字として使用すると、read基本的に区切り文字が表示されず、ファイルの終わりに遭遇するため、戻りステータスが1に設定されます。これwhile readを回避するためにループを使用できます。

Bashリファレンスマニュアルから:

ファイルの終わりが検出されない限り、戻りコードはゼロです。readタイムアウトになるか(この場合、戻りコードは128より大きい)、または無効なファイル記述子が' -u'の引数として指定されます。

また、は使用しないでください-e。明示的なエラー処理を使用します。BashFAQ/105を参照してください

さらに、スペース、タブ、改行を保持し、「マッシュに連結」しないようにするには、使用する変数を引用符で囲む必要がありますecho

于 2012-05-31T23:57:02.897 に答える