Read

拆分空分隔字元串

  • March 6, 2022

以下是兩個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+

嘗試使用數組和內置的mapfileAKA 。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

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