para loop sobre matriz de caracteres fornece inesperado “(”

0

Eu sou um novato de sangue no bash scripting e me desculpe se o seguinte é muito simples. O erro que recebo é:

4: Syntax error: "(" unexpected

Estou basicamente tentando executar o seguinte em bash em um servidor LTS Ubuntu 10.04.4:

#!/bin/bash

### Positions
declare -a POS=("01" "02" "03" "04" "05" "06" "16" "17" "18")

### Timeslices
declare -a ZSPOS_01=("1" "3" "4" "5")
declare -a ZSPOS_02=("1" "2" "3" "4" "5" "6" "8" "9" "10" "11" "12" "31" "41" "51" "101")
declare -a ZSPOS_03=("1" "2" "3" "4" "5" "6" "7" "8" "9" "31" "41" "91")
declare -a ZSPOS_04=("1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "41" "51" "101")
declare -a ZSPOS_05=("2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "51" "61" "101")
declare -a ZSPOS_06=("1" "2" "3" "4" "5" "6" "7" "8" "31" "51" "71")
declare -a ZSPOS_16=("1" "2" "3" "4" "11" "41")
declare -a ZSPOS_17=("1" "2" "3" "4" "11" "41")
declare -a ZSPOS_18=("1" "2" "3" "4")

for SCANPOSITION in ${POS[@]}
do
    for ZEITSCHNITT in ${ZSPOS_$SCANPOSITION[@]}
        do
            echo "Timeslice" $ZEITSCHNITT "in Position" $SCANPOSITION "!"
        done
done
    
por LoD 14.03.2015 / 11:42

1 resposta

1

  1. O erro ( unexpected indica que você está chamando seu script como sh scriptname em vez de bash scriptname ou, de preferência, chmod 755 scriptname; ./scriptname

  2. Os nomes de matrizes dinâmicas são difíceis de trabalhar no bash. Você precisa de uma variável temporária para usar com a expansão indireta .

    for SCANPOSITION in "${POS[@]}"
    do
        tmp="ZSPOS_${SCANPOSITION}[@]"
    
        for ZEITSCHNITT in "${!tmp}"    # note the "!"
        do
            echo "Timeslice $ZEITSCHNITT in Position $SCANPOSITION !"
        done
    done
    
  3. Você deve sempre citar seu "$variables" , a menos que saiba exatamente por que deseja deixar as citações.

  4. Além disso, não use o hábito de usar ALL_CAPS_VARS - algum dia você terá acidentalmente usa PATH e depois se pergunta por que seu script está quebrado

por glenn jackman 14.03.2015 / 17:14