Vraag voor lus over karakterarray geeft onverwacht "("


Ik ben een bloedige beginner in bash-scripting en het spijt me als het volgende heel eenvoudig is. De fout die ik krijg is:

4: Syntax error: "(" unexpected

Ik probeer in bash het volgende uit te voeren op een Ubuntu 10.04.4 LTS-server:

#!/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

0
2018-03-14 10:42


oorsprong


Kijk eens naar shellcheck.net - Cyrus
for ZEITSCHNITT in ${ZSPOS_$SCANPOSITION[@]} zou moeten zijn for ZEITSCHNITT in "$SCANPOSITION"..Plaats de volledige foutmelding die je hebt .. - heemayl


antwoorden:


  1. de ( unexpected fout geeft aan dat u uw script zoals belt sh scriptname in plaats van bash scriptname of, bij voorkeur chmod 755 scriptname; ./scriptname

  2. Dynamische arraynamen zijn moeilijk om mee te werken in bash. U hebt een tijdelijke variabele nodig om mee te gebruiken indirecte expansie.

    for SCANPOSITION in "${POS[@]}"
    do
        tmp="ZSPOS_${SCANPOSITION}[@]"
    
        for ZEITSCHNITT in "${!tmp}"    # note the "!"
        do
            echo "Timeslice $ZEITSCHNITT in Position $SCANPOSITION !"
        done
    done
    
  3. Je moet altijd je citaat citeren "$variables" tenzij je precies weet waarom je de offertes wilt laten staan.

  4. Neem ook de gewoonte om te gebruiken ALL_CAPS_VARS - ooit zal je dat doen per ongeluk gebruiken PATH en vraag je dan af waarom je script is verbroken


1
2018-03-14 16:14