【问题标题】:Prepending a variable to all items in a bash array将变量添加到 bash 数组中的所有项目
【发布时间】:2015-01-05 10:25:32
【问题描述】:
CURRENTFILENAMES=( "$(ls $LOC -AFl | sed "1 d" |  grep "[^/]$" | awk '{ print $9 }')" )

我已经编写了上面的代码,但是在我写的 for 循环中它的行为并不像我期望的那样

  for a in "$CURRENTFILENAMES"; do
      CURRENTFILEPATHS=( "${LOC}/${a}" )
  done

我希望将变量 LOC 中的值添加到 CURRENTFILENAMES 数组中的所有项目,但是它只是将它添加到数组的开头,我该如何解决这个问题?

【问题讨论】:

    标签: arrays bash


    【解决方案1】:

    您需要使用+= 运算符来追加到数组中:

    CURRENTFILEPATHS+=( "${LOC}/${a}" )
    

    但不建议解析ls 输出,请改用find


    编辑:运行此循环的正确方法:

    CURRENTFILEPATHS=()
    while IFS= read -d '' -r f; do
       CURRENTFILEPATHS+=( "$f" )
    done < <(find "$LOC" -maxdepth 1 -type f -print0)
    

    【讨论】:

    • 这只是给我数组的第一个值
    • ls $LOC -AFl | sed "1 d" | grep "[^/]$" | awk '{ print $9 }' 命令的输出是什么?
    • 请参阅 EDIT 部分,了解如何填充数组。
    • 可以使用:while read -r f; do CURRENTFILEPATHS+=( "$LOC/$f" ); done &lt; &lt;(ls -AFl "$LOC" | sed "1 d" | grep "[^/]$" | awk '{ print $9 }')
    • 没关系,我现在明白你的解决方案了,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-25
    • 2020-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    相关资源
    最近更新 更多