如何将多行字符串转换为数组并使用 bash 回显特定索引值?

How can turn a multiline string into arrays and echo a specific index value with bash?

bash --version: GNU bash, version 5.0.17(1)-release (x86_64-pc-linux-gnu)

我的多行变量包含这个字符串

item1 item2 item3 item4
item1 item2 item3 item4
item1 item2 item3 item4

我正在尝试输出 item3(最终将其用于 API 调用,但现在只是回显):

item3
item3
item3

这就是我尝试这样做的方式:

while IFS= read -r line
do
    printf "${line[2]}"
done < <(printf '%s\n' "$multiline")

我目前一无所获。表明(至少对我而言)printf 没有得到一个数组。但是当我用这样的东西循环时:

while IFS= read -r line
do
    for item in ${line[@]}
    do
        echo "$item"
    done
done < <(printf '%s\n' "$EC2")

它确实在不同的行上回显了所有 12 个项目,就好像 $line 是一个合法的数组一样。 我只想要每行的第 3 项。

$ var='item1 item2 item3 item4
item1 item2 item3 item4
item1 item2 item3 item4'

$ echo "$var" | cut -d' ' -f3
item3
item3
item3

或者如果您愿意:

$ while read -r _ _ foo _; do
    echo "$foo"
done <<< "$var"
item3
item3
item3

或给定 :

aws api call | cut -d' ' -f3

或:

while read -r _ _ foo _; do
    echo "$foo"
done < <(aws api call)

或:

readarray -d $'\n' -t arr < <(aws api call)
printf '%s\n' "${arr[@]}" | cut -d' ' -f3

等等……

类似于 cut -d' ' -f3 方法,但使用 awk:

$ echo 'item1 item2 item3 item4
item1 item2 item3 item4
item1 item2 item3 item4' | awk '{print }'

item3
item3
item3