読み取りを使用してheredoc文字列を変数に割り当てようとするbashスクリプトがあり、オプションと一緒に使用するread
場合にのみ機能します。-d ''
read -d '' <variable>
スクリプトブロック
#!/usr/bin/env bash
function print_status() {
echo
echo "$1"
echo
}
read -d '' str <<- EOF
Setup nginx site-config
NOTE: if an /etc/nginx/sites-available config already exists for this
website, this routine will replace existing config with template from
this script.
EOF
print_status "$str"
私が見つけたSOへのこの答えここからコマンドをコピーすると機能します。ところで、なぜそうなのでしょうか?read
最初の改行文字に出会うと、最初の呼び出しが停止することがわかっているので、文字列に表示されないいくつかの文字を使用すると、heredoc全体が読み込まれます。
read -d '|' <variable>
- 働くread -d'' <variable>
--これではない
read -d ''
私はこれが簡単だと確信しています。しかし、このコマンドオプションでは何が起こっていますか?
ベストアンサー1
問題はそれがうまくいくread -d ''
がうまくread -d''
いかない理由だと思います。
この質問は質問とは関係ありませんが、read
「問題」を引用しています。""
/文字列(単語)の一部として''
認識されません。シェルが見て/実行していることを示すようにします。
start cmd:> set -x
start cmd:> echo read -d " " foo
+ echo read -d ' ' foo
start cmd:> echo read -d" " foo
+ echo read '-d ' foo
start cmd:> echo read -d "" foo
+ echo read -d '' foo
start cmd:> echo read -d"" foo
+ echo read -d foo