【问题标题】:Why am I getting a bad substitution error in bash?为什么我在 bash 中遇到错误的替换错误?
【发布时间】:2021-06-09 10:29:26
【问题描述】:

在第二个 for 循环中,我收到错误“${Data${c}Answer[*]}:错误替换”。我相信这是$ c。对 bash 脚本来说还是新手,所以可能很容易解决,但似乎无法弄清楚。

declare -a Data1Answer=('0' '3' '4' '6' '9')
declare -a Data2Answer=('5' '7' '9' '11' '13')
for c in {1..2}; do
    echo \$c
    t=0
    java \${prog1} < data\${c}.txt &> user.out
    for ans in \${Data\${c}Answer[*]}; do
        if grep -q \$ans user.out
        then
            ((t++))
        fi
    done

【问题讨论】:

  • 你为什么要逃避$
  • 这不是参数扩展的工作方式。你需要一个nameref,见stackoverflow.com/questions/48751711/…
  • @Maroun 在我的电脑上我需要 \$ 以某种方式
  • @Ninja47 那你电脑上的东西非常坏了。

标签: bash shell


【解决方案1】:
declare -a Data1Answer=('0' '3' '4' '6' '9')
declare -a Data2Answer=('5' '7' '9' '11' '13')

for c in {1..2}; do
    echo $c
    t=0
    java "$prog1" < "data${c}.txt" &> user.out

    # a nameref
    declare -n data=Data${c}Answer

    for ans in "${data[@]}"; do
        grep -q "$ans" user.out && ((t++))
    done
    echo $t
done

注意事项:

  • ${braces} "$quotes" 相同
  • 要遍历数组的元素,请将"${array[@]}" 与引号和@ 索引一起使用(自服务explanation)。

【讨论】:

    猜你喜欢
    • 2021-08-17
    • 1970-01-01
    • 2020-08-03
    • 2013-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多