我正在尝试获取运行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版
上运行答案 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 仍然是健全的。