AWK'd命令输出和bash数组的问题

时间:2017-12-04 21:35:30

标签: arrays bash awk

我正在尝试获取运行VirtualBox VM(UUID)的列表并将它们放入数组中。以下命令产生以下输出:

$ VBoxManage list runningvms | awk -F '[{}]' '{print $(NF-1)}' 

f93c17ca-ab1b-4ba2-95e5-a1b0c8d70d2a
46b285c3-cabd-4fbb-92fe-c7940e0c6a3f
83f4789a-b55b-4a50-a52f-dbd929bdfe12
4d1589ba-9153-489a-947a-df3cf4f81c69

我想把这些UUID放到一个数组中(甚至可能是一个关联数组供以后使用,但现在一个简单的数组就足够了)

如果我执行以下操作:

array1="( $(VBoxManage list runningvms | awk -F '[{}]' '{print $(NF-1)}') )"

命令

array1_len=${#array1[@]}
echo $array1_len

输出“1”,因为只有1个元素。如果我打印出元素:

    echo ${array1[*]}

我得到了所有UUID的单行

( f93c17ca-ab1b-4ba2-95e5-a1b0c8d70d2a 46b285c3-cabd-4fbb-92fe-c7940e0c6a3f 83f4789a-b55b-4a50-a52f-dbd929bdfe12 4d1589ba-9153-489a-947a-df3cf4f81c69 )

我做了一些关于如何解决这个问题的研究(Bash Guide/Arrays,并通过命令替换和重定向发现了这一点,但它产生了一个空数组

while  read -r -d '\0'; do
        array2+=("$REPLY")
    done < <(VBoxManage list runningvms | awk -F '[{}]' '{print $(NF-1)}')

我显然错过了一些东西。我在这个网站上看了几个类似的问题,例如:

不幸的是,没有人帮助过。我会在确定如何获取输出并将其分配给数组时提供任何帮助。

我在macOS 10.11.6(El Captain)和BASH 3.2.57版

上运行

1 个答案:

答案 0 :(得分:1)

因为你在Mac上:

brew install bash

然后将此bash作为shell,将输出传递给:

readarray -t array1

在-t选项中,手册页说:

-t     Remove a trailing delim (default newline) from each line read.

如果bash4解决方案是可以接受的,那么给出建议 例如来自reading-output-of-command-into-array-in-bash的gniourf_gniourf  仍然是健全的。