我正在尝试从bash输出中创建一个数组/列表,然后我想循环它。我继续Syntax error: "(" unexpected (expecting "done")
。如果我不得不把它放在python术语中,我想用\ 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
答案 0 :(得分:2)
首先,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变量都应该在双引号内。
最好使用较低或混合大小写的变量名称。系统使用所有大写变量作为其名称,并且您不希望意外覆盖其中一个。