Bashを読むための-dオプションはどのように機能しますか?

Bashを読むための-dオプションはどのように機能しますか?

読み取りを使用して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

おすすめ記事