2016-08-07 26 views
2

Ich versuche, ein Array/Liste von einer Bash-Ausgabe zu machen, und dann möchte ich es für die Schleife. Ich bekomme weiter Syntax error: "(" unexpected (expecting "done"). Wenn ich es in einen Python-Begriff schreiben müsste, möchte ich die Zeichenfolge um \ n aufbrechen und dann für die Schleife wiederholen.Erstellen eines Array aus neuen Zeilen in der Bash

IFS=$'\n' 
    DELETE = ($($MEGACOPY --dryrun --reload --download --local $LOCALDIR --remote $REMOTEDIR | sed 's|F '$LOCALDIR'|'$REMOTEDIR'|g')) 
    unset IFS 

    # And remove it 

    for i in $DELETE; do 
    $MEGARM $i 
    done 
+0

'für i in" $ DELETE "; mach es. Beachten Sie die Anführungszeichen um '$ DELETE' – inspectorG4dget

Antwort

2

Erstens, Shell ist nicht Python. Räume um Gleichheitszeichen funktionieren nicht:

DELETE = ($($MEGACOPY --dryrun --reload --download --local $LOCALDIR --remote $REMOTEDIR | sed 's|F '$LOCALDIR'|'$REMOTEDIR'|g')) 

Wenn die Shell die oben sieht, ist es DELETE als Programmnamen und = als erstes Argument interpretiert. Der Fehler, den Sie sehen, liegt daran, dass die Shell das zweite Argument nicht analysieren konnte.

die obige Ersetzen mit:

DELETE=($("$MEGACOPY" --dryrun --reload --download --local "$LOCALDIR" --remote "$REMOTEDIR" | sed 's|F '"$LOCALDIR"'|'"$REMOTEDIR"'|g')) 

Zweitens, die for Schleife über, DELETE ist ein Array, und Arrays haben spezielle Syntax:

for i in "${DELETE[@]}"; do 
    "$MEGARM" "$i" 
done 

Anmerkungen:

  1. Sofern Sie möchten Worttrennung und Pfadnamenerweiterung, alle Shellvariablen sollten innerhalb von double sein Anführungszeichen.

  2. Es wird empfohlen, für Variablennamen Kleinbuchstaben oder Groß- und Kleinbuchstaben zu verwenden. Das System verwendet alle Großbuchstaben für seinen Namen und Sie möchten nicht versehentlich einen von ihnen überschreiben.