私はbashGNU bash, version 4.3.30(1)-release (x86_64-pc-linux-gnu)
とDebianの最新のダッシュアクション(ダッシュバージョンを取得する方法?)でこの動作を見つけました。
エラーは次のとおりです。
/bin/echo "Silent Err 'unexpected EOF while looking for matching' Example:"
if [ 0 -eq 1 ]; then
/bin/echo "HERE IS MISTAKE WITHOUT QUOTE IN THE END
exit
fi
/bin/echo " BLACK HOLE "
/bin/echo " CODE WILL NEVER PROCEED "
if [ 0 -eq 1 ]; then
/bin/echo "SECOND MISTAKE
exit
fi
/bin/echo "normal code... will work";
/bin/echo "Good and silent exit without any notice about BLACK HOLE code..."
/bin/echo "exit."
放射:
# bash bug_as_is.sh
Silent Err 'unexpected EOF while looking for matching' Example:
normal code... will work
Good and silent exit without any notice about BLACK HOLE code place...
exit.
if then fi
エラーは、最初のブロックが参照されたときにのみ発生します。
# bash unbug.sh
Silent Err 'unexpected EOF while looking for matching' Example:
BLACK HOLE
CODE WILL NEVER PROCEED
unbug.sh: line 20: unexpected EOF while looking for matching `"'
unbug.sh: line 24: syntax error: unexpected end of file
これはよく知られているエラーですか、それとも私が本物のダイヤモンドを見つけましたか? (;;
この行動の根拠は何ですか?
ベストアンサー1
Bashにエラーがありません。コードが正常に動作します。
echo
bashは、文字列が奇妙に見え、bashコードを含む場合でも、複数行の文字列を引数として受け入れます。
以下は、echo
複数行の文字列出力を含むステートメントです。
/bin/echo "HERE IS MISTAKE WITHOUT QUOTE IN THE END
exit
fi
/bin/echo " BLACK HOLE "
/bin/echo " CODE WILL NEVER PROCEED "
if [ 0 -eq 1 ]; then
/bin/echo "SECOND MISTAKE
これを明確にするために長い文字列を"multiline string omitted"
。まあ、コードは簡単です:
/bin/echo "Silent Err 'unexpected EOF while looking for matching' Example:"
if [ 0 -eq 1 ]; then
/bin/echo "multiline string omitted"
exit
fi
/bin/echo "normal code... will work";
/bin/echo "Good and silent exit without any notice about BLACK HOLE code..."
/bin/echo "exit."
上記のコードは正常に動作するコードです。