【发布时间】:2023-04-01 21:11:01
【问题描述】:
我试图了解我在这里做错了什么,但似乎无法确定原因。我想从输出中为 bash 中的 for 循环创建一组数组。以下是我到目前为止的代码:
for i in `onedatastore list | grep pure02 | awk '{print $1}'`;
do
arr${i}=($(onedatastore show ${i} | sed 's/[A-Z]://' | cut -f2 -d\:)) ;
echo "Output of arr${i}: ${arr${i}[@]}" ;
done
条件的输出如下:
107
108
109
我想做的是基于这些唯一的 ID 创建数组:
arr107
arr108
arr109
每个数组都会有这样的数据:
[oneadmin@opennebula/]$ arr107=($(onedatastore show 107 | sed 's/[A-Z]://' | cut -f2 -d\:))
[oneadmin@opennebula/]$ echo ${arr107[@]}
DATASTORE 107 INFORMATION 107 pure02_vm_datastore_1 oneadmin oneadmin 0 IMAGE vcenter vcenter /var/lib/one//datastores/107 FILE READY DATASTORE CAPACITY 60T 21.9T 38.1T - PERMISSIONS um- u-- --- DATASTORE TEMPLATE CLONE_TARGET="NONE" DISK_TYPE="FILE" DS_MAD="vcenter" LN_TARGET="NONE" RESTRICTED_DIRS="/" SAFE_DIRS="/var/tmp" TM_MAD="vcenter" VCENTER_CLUSTER="CLUSTER01" IMAGES
当我在脚本部分尝试这个时,虽然我得到了这样的输出错误:
./test.sh: line 6: syntax error near unexpected token `$(onedatastore show ${i} | sed 's/[A-Z]://' | cut -f2 -d\:)'
我似乎无法弄清楚在这种情况下要使用的语法。
最后我想做的是能够比较不同的数据存储,并根据哪个有更多的可用空间,将虚拟机部署到它。
希望有人可以提供帮助。谢谢
【问题讨论】:
-
哪个特定版本的 bash?
-
请务必阅读Bash FAQ 001。
标签: arrays bash loops for-loop