【问题标题】:bash read from file and store in array [duplicate]bash从文件中读取并存储在数组中[重复]
【发布时间】:2018-05-03 22:58:53
【问题描述】:

假设我有一个如下所示的文件:

element1,element2  
element3,element4  
element5,element6

如何在 bash 中读取此文件并将其存储在数组中,如下所示:

array={element1,element2,element3,element4,element5,element6}

有人可以帮我写代码吗?谢谢!

【问题讨论】:

  • 标记的副本将完整的行读取为数组元素,这里 OP 要求每行读取多个元素。

标签: arrays bash file


【解决方案1】:

您可以完全忽略read,只需在设置IFS 后使用重定向,例如

$ IFS=$', \t\n'; a=($(<file)); declare -p a
declare -a a='([0]="element1" [1]="element2" [2]="element3" [3]="element4" \
[4]="element5" [5]="element6")'

【讨论】:

    【解决方案2】:

    你可以使用这个 bash 代码:

    while IFS='' read -r line || [[ -n "$line" ]]; do
      array+=("$line")
    done < "$1"
    
    echo ${array[@]}
    

    这会读取您通过参数行指定的文件的内容,并逐行读取,同时将值存储在 bash 数组中。

    再见!

    【讨论】:

      【解决方案3】:

      您可以这样做,而不是逐行阅读,然后用逗号分隔:

      IFS=,$'\n' read -d '' -r -a array <file
      

      这将:

      • 使用NUL 字符作为行分隔符(-d ''),这样(如果您的文件不包含空字符)一次读取完整文件
      • 使用IFS分割字段中的“行”(即完整文件),设置为逗号和换行符IFS=,$'\n'
      • 将所有单词/元素存储在array

      输出:

      $ printf "%s\n" "${arr[@]}"
      element1
      element2
      element3
      element4
      element5
      element6
      

      【讨论】:

        猜你喜欢
        • 2013-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-03
        • 2013-04-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多