分割一个空分隔的字符串

分割一个空分隔的字符串

以下是两个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

尝试使用数组和mapfileAKAreadarray内置数组。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

相关内容