HEREDOCを "ruby -e"に文字列として渡すことができないのはなぜですか?

HEREDOCを

理解できない理由で区切られた文書をRubyインタプリタに式として渡すことは不可能です。

$ ruby -e <<END
heredoc> puts 'hi'
heredoc> END

ruby: no code specified for -e (RuntimeError)

Perlでも同じことが起こり、痛いことにRubyとは何の関係もありません。

$ perl -e<<END
heredoc> print 'hi'
heredoc> END
No code specified for -e.

以下がある場合でもsed

$ echo "blah" | sed -e <<END
pipe heredoc> s/.*/Hi/
pipe heredoc> END
sed: option requires an argument -- e
usage: sed script [-Ealn] [-i extension] [file ...]
       sed [-Ealn] [-i extension] [-e script] ... [-f script_file] ... [file ...]

Rubyに区切り文字を式として渡す方法は? (またはPerlまたはSed ...)

ベストアンサー1

これは、巨大な文字列を生成してパラメータとして渡すことが、「ここのドキュメント」で実行する操作ではないためです。一部のジョブの入力に接続できるストリームを生成します。

具体的には、

cat <<!
foo
!

等しくない

cat foo

言い換えればcat、それは私たちに役立ちます。警告する:いいえcat以下を使用すると、役に立たない!

echo $(cat <<!
foo
!
)

見て、私たちできるcat提供されたhereドキュメントに適用されたコマンドの置き換えのおかげで、hereドキュメントをパラメータとして渡します。

おすすめ記事