如何将多行字符串变成阵列并用bash呼应特定的索引值?

发布于 2025-01-25 02:57:15 字数 678 浏览 1 评论 0原文

bash- version:gnu bash,版本5.0.17(1)-Release(x86_64-pc-linux-gnu)

我的多行var包含

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个项目,就好像$行是一个合法的数组一样。 我只想每行的项目3。

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

my multiline var contains this string

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

I am trying to output item3 (eventually use it for an API call but just echo it for now) as such:

item3
item3
item3

This is how I'm attempting to do it:

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

I currently get nothing. Indicating (to me at least) that printf is not getting an array. But when I loop with something like this:

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

It does echo all 12 items on separate lines as if $line was a legitimate array.
I just want item3 of each line.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

記柔刀 2025-02-01 02:57:15
$ 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 

etc。

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

etc。

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

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

or if you prefer:

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

or given your command:

aws api call | cut -d' ' -f3

or:

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

or:

readarray -d 

etc....

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

etc....

酒绊 2025-02-01 02:57:15

类似于剪切-d''-f3方法,但使用awk

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

item3
item3
item3

Similar to the cut -d' ' -f3 approach but using awk:

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

item3
item3
item3
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文