Bash

bash 讀取的 -d 選項如何工作?

  • September 25, 2016

我有一個 bash 腳本,我正在嘗試使用 read 將 heredoc 字元串分配給一個變數,並且它僅在我使用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 ''命令選項是怎麼回事?

我想問題是為什麼read -d ''有效但read -d''無效。

這個問題沒有任何關係,read而是一個引用“問題”。作為字元串(單詞)的一部分的""/''根本無法辨識。讓 shell 向您展示看到/執行的內容:

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

引用自:https://unix.stackexchange.com/questions/257684