我正在尝试从 bash 输出创建一个数组/列表,然后我想 for 循环它。我不断收到语法错误:“(”意外(期望“完成”)
。如果我必须将其放入 python 术语中,我想用\n 将字符串分解,然后 for 循环它.
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 变量都应该放在双引号内。
最佳实践是使用小写或混合大小写作为变量名称。系统使用所有大写变量作为其名称,您不想意外覆盖其中之一。
关于arrays - 在 bash 中从新行创建数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38818761/