如何将多行字符串转换为数组并使用 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
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