Read
拆分空分隔字元串
以下是兩個
read
語句,一個使用空格作為分隔符,另一個使用\0
. 只有第一個作品。第二個我做錯了什麼?$ IFS=' '; read first second < <(printf "%s " "x" "y" ); echo "$first+$second"
x+y
$ IFS=$'\0'; read first second < <(printf "%s\0" "x" "y" ); echo "$first+$second"
xy+
嘗試使用數組和內置的
mapfile
AKA 。readarray
詳情請參閱help mapfile
。如果您提供一個空字元串作為mapfile
’s-d
選項的參數,它將使用 NUL 作為分隔符。首先,創建一個函式,可以將一個數組連接成一個帶有任意分隔符的字元串:
$ joinarray() { local IFS="$1"; shift; echo "$*"; }
這使用第一個參數作為輸出分隔符,然後使用 echo 將剩餘的參數列印為單個字元串。這不僅限於連接數組,它適用於任何參數(數組、標量變數、固定字元串),但在與數組一起使用時特別有用。它被呼叫
joinarray
所以它不會與標準join
命令衝突。然後,使用一個名為“$array”的數組:
$ mapfile -d '' array < <(printf "%s\0" "x" "y" ) # read the data into $array $ declare -p array # show that the data was read correctly declare -a array=([0]="x" [1]="y") $ joinarray + "${array[@]}" # output the array joined by + characters x+y