Bash
bash 讀取的 -d 選項如何工作?
我有一個 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