【问题标题】:bad substitution shell- trying to use variable as name of array错误的替换外壳 - 尝试使用变量作为数组的名称
【发布时间】:2015-10-16 21:51:39
【问题描述】:
#!/bin/bash
array=( 2 4 5 8 15 )
a_2=( 2 4 8 10 )
a_4=( 2 4 8 10 )
a_5=( 10 12 )
a_8=( 8 12 )
a_15=( 2 4 )
numberOfTests=5
while [ $i -lt ${#array[@]} ]; do
    j=0
    currentArray =${array[$i]}
    *while [ $j -lt ${#a_$currentArray [@]} ]; do #### this line i get ->>>> bad substitution*
        ./test1.sh  "${array[$i]}" -c "${a_"$currentArray "[$j]}" &
        let j=j+1
    done
    let i=i+1
done

所以我尝试这段代码,循环一个数组(称为数组),数组应该指出 我们现在循环的数组编号(a_X)。并且每次都指出当前的位置和价值。 谁能帮助我如何使用 $currentArray 正常工作,以便我知道数组的长度和值? 我进入我标记错误的行。 谢谢各位!

【问题讨论】:

  • bash 不进行嵌套参数扩展。目前尚不清楚如何完成您想要的。您使用的是哪个版本的bash? (bash 4.3 中的 Namerefs 可能使这变得容易/可能。)

标签: arrays bash shell variables


【解决方案1】:

最简单的解决方案是在array 中存储数组的全名,而不仅仅是数字后缀。然后,您可以在直接迭代数组的值而不是索引时使用间接参数扩展。

# Omitting numberOfTests has it does not seem to be used
array=(a_2 a_4 a_5 a_8 a_15)
a_2=( 2 4 8 10 )
a_4=( 2 4 8 10 )
a_5=( 10 12 )
a_8=( 8 12 )
a_15=( 2 4 )
for arr in "${array[@]}"; do
    currentArray=$arr[@]
    for value in "${!currentArray}"; do
        ./test1.h "${arr#a_}" -c "$value" &
    done
done

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 2016-04-11
    • 1970-01-01
    • 2021-12-30
    • 2015-02-21
    • 1970-01-01
    • 2012-05-09
    相关资源
    最近更新 更多