我想在 bash 中迭代一些列表。现在我有
array=("list1item1 list1item2" "list2item list2item2")
for list in "${array[@]}"
do
for item in $list
do
echo $item
done
done
这是行不通的。有什么方法可以在 bash 中创建列表列表、数组数组或列表数组吗?
我想迭代 list1,然后迭代 list1 中的列表项。然后迭代 list2 以及 list2 中的列表项。
一旦我添加了缺失的do
and done
进入你的代码:
array=("list1item1 list1item2" "list2item list2item2")
for list in "${array[@]}"
do
for item in $list
do
echo $item
done
done
它产生了预期的输出:
list1item1
list1item2
list2item
list2item2
我不清楚这与您的期望有何不同。
但是,这并不是将列表嵌套到数组中的非常通用的方法,因为它取决于 IFS 分隔的内部列表。 Bash 不提供嵌套数组;数组严格来说就是字符串数组,仅此而已。
您可以使用间接(${!v}
)并将变量名称存储到外部数组中,尽管它有点难看。下面是一个不太难看的变体,它依赖于 namerefs;它将与相当新的 bash 版本一起使用:
array=(list1 list2)
list1=("list 1 item 1" "list 1 item 2")
list2=("list 2 item 1" "list 2 item 2")
for name in "${array[@]}"; do
declare -n list=$name
for item in ${list[@]}; do
echo "$item"
done
done
Output:
list 1 item 1
list 1 item 2
list 2 item 1
list 2 item 2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)