Joerg: [bash] File in array einlesen?

Hi,

ich habe hier gerade ein vertracktes Problem mit der bash (GNU bash, version 2.05b.0(1)-release).

Ziel: Inhalt einer Datei in array ${cmd[]} einlesen und spaeter im selben script weiterverwenden.

Ansatz:
cnt = 0                           # just a lonely counter
cat /path/to/file | while read line; do
    cmd[$cnt]=${line}             # assign line to array entry
    echo $cnt $line ${cmd[$cnt]}  # show the whole stuff
    let cnt=$cnt+1                # increase counter
done

Problem: Das funktioniert auch "soweit" (siehe die "echo ..."-Zeile), aber ... nach dem Durchlauf der Schleife ist $cnt 0, und $cmd leer.

Was uebersehe ich da, bzw. wie bekomme ich dieses Array "persistent"?

Danke fuer jede Hilfe!

  • Joerg
  1. Hallo

    ich habe hier gerade ein vertracktes Problem mit der bash (GNU bash, version 2.05b.0(1)-release).

    Ansatz:
    cnt = 0                           # just a lonely counter
    cat /path/to/file | while read line; do

    # Hier entsteht das Subshellproblem.
          # Die folgenden Variablen sind nur in der Subshell verfügbar

    cmd[$cnt]=${line}             # assign line to array entry
        echo $cnt $line ${cmd[$cnt]}  # show the whole stuff
        let cnt=$cnt+1                # increase counter
    done

    und hier nicht mehr.

    Was uebersehe ich da, bzw. wie bekomme ich dieses Array "persistent"?

    Lösungsmöglichkeit:

      
    declare -i cnt=0                  # eine wundervolle Integer  
    declare -a cmd                    # ein nettes Array  
      
    exec 3<>/path/to/file             # nutze exec um die Subshell zu vermeiden  
      
    while read line <&3; do           # lese Datei zeilenweise  
        cmd[$cnt]=$line  
        let cnt++  
    done  
      
    exec 3>&-  
      
    echo $cnt                         # ist nun nicht mehr 0  
    
    

    Freundliche Grüße

    Vinzenz