ico*_*ast 4 quoting ruby here-document
由于我不明白的原因,似乎不可能将 heredoc 作为表达式传递给 Ruby 解释器:
$ ruby -e <<END
heredoc> puts 'hi'
heredoc> END
ruby: no code specified for -e (RuntimeError)
Run Code Online (Sandbox Code Playgroud)
同样的事情也发生在 Perl 上,这让我们很痛苦地发现它与 Ruby 无关。
$ perl -e<<END
heredoc> print 'hi'
heredoc> END
No code specified for -e.
Run Code Online (Sandbox Code Playgroud)
甚至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 ...]
Run Code Online (Sandbox Code Playgroud)
如何将 heredoc 作为表达式传递给 Ruby?(或 Perl,或 Sed...)
这是因为创建一个巨大的字符串并将其作为参数传递不是“此处文档”所做的。他们创建一个流,它可以连接到某个作业的输入。
具体来说,
cat <<!
foo
!
Run Code Online (Sandbox Code Playgroud)
不等于
cat foo
Run Code Online (Sandbox Code Playgroud)
.
说到cat
这里,它可以帮助我们。警告:以下非无用使用cat
!
echo $(cat <<!
foo
!
)
Run Code Online (Sandbox Code Playgroud)
看,我们可以传递一个 here doc 作为参数,这要归功于应用了cat
一个 here doc 的命令替换。