我想从一个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
笔记:
除非要分词和路径名扩展,否则所有的shell变量都应该在双引号内。
对变量名称使用较低或混合的大小写是最佳做法。 系统使用所有的大写字母变量作为名字,你不想意外覆盖其中的一个。