Bash:命令 stdout 到行数组(空格问题)

Bash:命令 stdout 到行数组(空格问题)

情况:我必须将命令输出存储在数组中,每一行都是一个元素。这些行可能包含空格,这似乎使一切都变得混乱。

通常我会做类似的事情ARRAY=($(command))。但是,如果我尝试做类似的事情,ARRAY=($(printf '%s\n' "first line" "second line"))数组将如下所示

$ for x in "${ARRAY[@]}"; do echo $x; done
first
line
second
line

我找到了一种方法来实现我正在寻找的行为,尽管它有点难看。

$ readarray -t ARRAY < <(printf '%s\n' "first line" "second line")
$ for x in "${ARRAY[@]}"; do echo $x; done
first line
second line

有谁知道更好的方法来做到这一点?我错过了什么吗?

答案1

readarray/mapfile方法来做到这一点,但是这个功能是在 bash v4 周围添加的,所以如果你使用的系统没有它(macos),你可以用一种更“丑陋”的方式来做到这一点:

IFS=$'\n' array=($(printf '%s\n' "first line" "second line"))

或者以一种更丑陋的方式:

while IFS= read -r line; do 
    array+=("$line")
done < <(printf '%s\n' "first line" "second line")

相关内容