以下是两个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"
坐标+
答案1
尝试使用数组和mapfile
AKAreadarray
内置数组。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