arrays - 在 bash 中从新行创建数组

标签 arrays linux bash

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

注释:

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

  2. 最佳实践是使用小写或混合大小写作为变量名称。系统使用所有大写变量作为其名称,您不想意外覆盖其中之一。

关于arrays - 在 bash 中从新行创建数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38818761/

相关文章:

bash - 如何在 shell 中的指定行号中添加或删除字符?

bash - Grep 匹配的行包括下面和另一个匹配的行包括上面

javascript - 将字符串值转换为 JavaScript 中的变量引用

javascript - 递归地将数组元素放入自己的数组中

linux - 如何或修改 KVM 中的 CPUID 模拟代码中的哪个文件来报告虚构的处理器品牌字符串(CPUID leaf 0x0)?

linux - Windows命令行GIT密码提示

python - Bash 脚本与用于 Shell-Command-Heavy 实用程序的 Python 脚本的优点

python - 通过重新解释原始字节从一种类型的 numpy 数组转换为另一种类型

python - 当元素包含 numpy 数组时,无法测试 python 列表元素成员资格

c - Linux/C : Redirecting Pipes to STDIN/STDOUT