Sam*_*Sam 2 arrays bash shell terminal command-line
我有一个名为“循环”的数组。
对于“循环”中的每个元素,我想创建一个数组,其名称包含当前元素的文本。
然后我想遍历每个新数组并打印每个数组中的每个元素。
这篇文章似乎对变量有一个很好的解决方案,但我不知道如何使它适用于数组。
我的脚本
#!/bin/bash
loop=(
first
second
third
)
for word in "${loop[@]}"
do
declare "${word}_holder=( hello world )"
var="${word}_holder"
echo "$var"
for i in "${!var}[@]"
do
echo "$i"
done
done
Run Code Online (Sandbox Code Playgroud)
电流输出
first_holder
( hello world )[@]
second_holder
( hello world )[@]
third_holder
( hello world )[@]
Run Code Online (Sandbox Code Playgroud)
期望输出
first_holder
hello
world
second_holder
hello
world
third_holder
hello
world
Run Code Online (Sandbox Code Playgroud)
for word in "${loop[@]}";
do
name="${word}_holder";
declare -a "$name";
declare -n arr="$name";
echo $name;
arr=(hello world);
arr_ref="$name[@]";
for w in "${!arr_ref}";
do
echo $w;
done;
done;
first_holder
hello
world
second_holder
hello
world
third_holder
hello
world
Run Code Online (Sandbox Code Playgroud)
当然,如果您永远不打算引用动态生成的数组(first_holder 等),那么做这一切是没有意义的。
它并不漂亮,但它是一个开始:
#!/bin/bash
loop=(
first
second
third
)
for word in "${loop[@]}"
do
var=${word}_holder
eval "declare -a ${var}"
eval "${var}=( Hello World )"
eval 'nEntries=${#'${var}'[@]}'
echo ${var}
for (( ii=0; ii<$nEntries; ii++ )); do
cmd='echo ${'${var}'['$ii']}'
eval ${cmd}
done
done
Run Code Online (Sandbox Code Playgroud)