我通过包含其他数组的数组试图环和这些阵列由带有空格的字符串。 问题是,我似乎无法保留字符串中的间距。 用空格字符串要么分为多个项目,如果我改变IFS为\ n或者,如果我离开IFS不变,这里的数组的所有元素都被视为第一项是一些示例代码:
#!/bin/sh
low1=("AA QQ" "BB LL")
low2=("CC" "DD")
low3=("EE" "FF")
high=(low1 low2 low3)
for high_item in ${high[@]}
do
eval arrayz=\${$high_item[@]}
#IFS=$'\n'
for item in $arrayz
do
echo $item
done
done
输出:
AA
QQ
BB
LL
CC
DD
EE
FF
正如你所看到的“AA QQ”和“BB LL”已分裂的元素。
如果我取消那台线IFS
到\n
我得到如下:
AA QQ BB LL
CC DD
EE FF
现在, “QQ AA” 和 “BB LL” 被连接起来!
反正我有可以保留这些元素就像他们原来是...我需要输出的样子说:
AA QQ
BB LL
CC
DD
EE
FF
我觉得你的意思是,输出应该是这样的:
AA QQ
BB LL
CC
DD
EE
FF
即:
${low1[0]}
${low1[1]}
${low2[0]}
${low2[1]}
${low3[0]}
${low3[1]}
这可以通过使用来完成:
#!/bin/bash
low1=("AA QQ" "BB LL")
low2=("CC" "DD")
low3=("EE" "FF")
high=(low1 low2 low3)
for high_item in ${high[@]}
do
x="${high_item}[@]" # -> "low1[@]"
arrays=( "${!x}" )
#IFS=$'\n'
for item in "${arrays[@]}"
do
echo "$item"
done
done
并请始终使用#!/bin/bash
进行的bash脚本。
说明: ${!x}
是间接的变量扩展。 它的计算结果为变量包含在一个名称值$x
。
对于我们的需要, x
需要有[@]
后缀阵列扩展为好。 特别要注意,这是x=${high_item}[@]
而不是 x=${high_item[@]}
而且你必须在阵列方面对其进行评估; 否则,预期这将无法正常工作(如果你这样做arrays=${!x}
嗯,并作为最后请注意: IFS
不作任何区别就在这里。 只要你在引用数组时, IFS
不会发挥作用。
更换eval
间接参数扩展,你会得到什么,我想你想(虽然它没有你当前给定的输出相匹配:
for high_item in "${high[@]}"
do
arrayz="$high_item[@]"
# arrayz is just a string like "low1[@]"
for item in "${!arrayz}"
do
echo $item
done
done
注意需要引用在内部循环阵列的扩展以保留在元件中的空白low1
。