2016-08-07 14 views
2

bashの出力から配列/リストを作成しようとしていて、それをループしたいと思います。私はSyntax error: "(" unexpected (expecting "done")を得続けます。私はPythonの用語でそれを置く必要があった場合、私は\ nで文字列を分割し、ループのためにしたい。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

'' $ DELETE "のiの場合;します。 '$ DELETE'の前後に二重引用符があることに注目してください。 – inspectorG4dget

答えて

2

まず、シェルはpythonではありません。等号の前後の空白は動作しません:

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

シェルは上記を見

が、それはその最初の引数としてプログラム名として DELETE=を解釈します。シェルが2番目の引数を解析できなかったために表示されるエラーです。

で上記の置換:

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

次に、forループについて、DELETEは、アレイおよびアレイは特別な構文を持っている:

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

  1. ない限り単語の分割とパス名の拡張が必要な​​場合は、すべてのシェル変数が2倍の内部にある必要がありますle-quotes。

  2. 変数名に小文字または大文字小文字を使用することをお勧めします。システムはその名前に大文字の変数をすべて使用します。誤ってその中の1つを上書きすることは望ましくありません。

関連する問題