【问题标题】:populate and read an array with a list of filenames使用文件名列表填充和读取数组
【发布时间】:2011-10-02 16:13:28
【问题描述】:

小问题。

#!/bin/bash

if test -z "$1"
then
  echo "No args!"
  exit
fi

for newname in $(cat $1); do
  echo $newname
done

我想用 array population 代码替换循环内的 echo。 然后,循环结束后,我想再次读取数组并回显内容。 谢谢。

【问题讨论】:

    标签: arrays bash populate


    【解决方案1】:
    #!/bin/bash
    
    files=( )
    for f in $(cat $1); do
        files[${#files[*]}]=$f
    done
    
    for f in ${files[@]}; do
        echo "file = $f"
    done
    

    【讨论】:

    • 不起作用:只保存了数组的最后一个元素。
    • 奇怪,我只是在我的机器上用ls -1 而不是cat $1 完成了它,它正在工作......也许与bash版本有关!?
    • 需要加双引号:for f in "${files[@]}"
    • 你可以附加到一个数组(在 bash 中):files+=($f)
    【解决方案2】:

    如果文件,如您的代码所示,有一组文件,每个文件在一行中,您可以将值分配给数组,如下所示:

    array=(`cat $1`)
    

    之后,要处理每个元素,您可以执行以下操作:

    for i in ${array[@]} ; do echo "file = $i" ; done
    

    【讨论】:

      【解决方案3】:
      declare -a files
      while IFS= read -r
      do
          files+=("$REPLY") # Array append
      done < "$1"
      echo "${files[*]}" # Print entire array separated by spaces
      

      cat is not needed 这个。

      【讨论】:

        猜你喜欢
        • 2014-02-23
        • 2011-07-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-08
        • 1970-01-01
        相关资源
        最近更新 更多