在bash中从新行创建一个数组

时间:2016-08-07 21:30:55

标签: arrays linux bash

我正在尝试从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

1 个答案:

答案 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

注意:

  1. 除非您想要分词和路径名扩展,否则所有shell变量都应该在双引号内。

  2. 最好使用较低或混合大小写的变量名称。系统使用所有大写变量作为其名称,并且您不希望意外覆盖其中一个。