从bash中的新行创build一个数组

我想从一个bash输出做一个数组/列表,然后我想循环它。 我继续得到Syntax error: "(" unexpected (expecting "done") 。如果我不得不把它放在python术语中,我想打破string由\ n然后循环它。

  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 

首先,shell不是python。 等号周围的空间不起作用:

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

当shell看到上面的内容时,它将DELETE解释为程序名和=作为第一个参数。 你看到的错误是因为shell无法解析第二个参数。

将上面的内容替换为:

 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. 除非要分词和路径名扩展,否则所有的shell变量都应该在双引号内。

  2. 对变量名称使用较低或混合的大小写是最佳做法。 系统使用所有的大写字母变量作为名字,你不想意外覆盖其中的一个。