【发布时间】:2014-04-30 09:02:59
【问题描述】:
我已经在这里搜索并搜索了答案,我认为作为 bash 的菜鸟、不知道正确的方法以及不搜索正确的关键字的组合意味着我不能克服最后的障碍。
我正在编写一个基本的 bash 脚本,以根据逗号分隔数组变量的内容将配置行创建到文件中。它非常适用于单个变量,但是当我尝试组合两个数组变量时,它并不完全有效。我试过在循环内循环,当我希望它与它创建的其他 5 行循环时,它只是一个接一个地创建行。
这两个变量的迭代次数相同。例如:
- arr1=SITENAME1,SITENAME2,SITENAME3
- arr2=12:ac:23:bf:12:ca,22:de:a2:bf:21:ac,01:e4:32:f0:12:c4
我想将它们一起传递到循环中:
- SITENAME1 ($y) 和 12:ac:23:bf:12:ca ($x)
- SITENAME2 ($y) 与 22:de:a2:bf:21:ac ($x)
- SITENAME3 ($y) 与 01:e4:32:f0:12:c4 ($x)
这里是代码摘录:
arr1=$(echo $sites | tr "," "\n")
arr2=$(echo $mastermacs | tr "," "\n")
IFS="," read -a arr1 <<< "$sites"
IFS="," read -a arr2 <<< "$mastermacs"
for y in "${!arr1[@]}"; do
# for x in "${arr2[@]}"; do
n=$(($n+1))
echo "config flexconnect group ${arr1[y]} add"$'\r' >> Flex-cfg.txt
echo "config flexconnect group ${arr1[y]} ap add ${arr2[x]} "$'\r' >> Flex-cfg.txt
echo "config flexconnect group ${arr1[y]} predownload master ${arr1[y]}_AP01"$'\r' >> Flex-cfg.txt
echo "config flexconnect group ${arr1[y]} predownload enable"$'\r' >> Flex-cfg.txt
echo "config flexconnect group ${arr1[y]} predownload start primary"$'\r' >> Flex-cfg.txt
# done
done
尤其是这一行,我正在尝试使用 2 个值进行迭代(顺便说一下,我只使用了 $y 和 $x,我只是在修修补补):
echo "config flexconnect group ${arr1[y]} ap add ${arr2[x]} "$'\r' >> Flex-cfg.txt
但就目前而言,它每次只放置第一个。值 Y 是名称,值 X 是 MAC 地址。
我要么非常接近,要么完全完全错误。所以可以通过一些善意的帮助来做!
【问题讨论】:
-
你能展示一下 arr1 和 arr2 里面的内容吗?
-
arr1 只是一串 alpha 字符。 arr2 是 MAC 地址。
-
这段代码的一个问题是
arr1和arr2实际上不是数组;它们只是带有嵌入换行符的字符串。arr1=( $(echo $sites | tr "," "\n") )会更正确(尽管不完全正确)。 (虽然下面的read语句覆盖了arr1的值,所以初始赋值没有实际意义。) -
感谢 chepner。是的,那里可能有一些奇怪的线条,因为我已经切碎并改变了一点。 tr "," 与 IFS 行相同。我的主要问题是我无法让两个变量并行循环在一起......
标签: arrays bash variables multiple-value