【问题标题】:Fill in multiple arrays from command's output - Bash从命令的输出中填充多个数组 - Bash
【发布时间】:2013-03-16 22:35:46
【问题描述】:

我正在寻找使用 Bash 从命令输出中填充多个数组的最佳方法。

我现阶段想出的解决办法是:

i=1
ls -al | while read line
do
            # Separate columns into arrays
            array_filetype[ $i ]=`echo $line | awk '{print $1}'`
            array_owner[ $i ]=`echo $line | awk '{print $3}'`
            array_group[ $i ]=`echo $line | awk '{print $4}'`
            echo "${array_filetype[$i]} - ${array_owner[$i]} - ${array_group[$i]}"
    (( i++ ))
done

输出是:

drwxrwxr-x - arsene - arsene
drwx--x--- - arsene - arsene
-rw-rw-r-- - arsene - arsene
-rw-rw-r-- - arsene - arsene
-rw-rw-r-- - arsene - arsene
-rw-rw-r-- - arsene - arsene
-rw-rw-r-- - arsene - arsene
-rwx------ - arsene - arsene
-rwx------ - arsene - arsene
-rwxr-xr-x - arsene - arsene
-rwx------ - root - root

提前致谢。

【问题讨论】:

    标签: arrays bash file command output


    【解决方案1】:

    您可以立即进行的改进是不要将整行作为一个整体来阅读:

    i=1
    ls -al | while read type links owner group rest-of-line-we-dont-care-about
    do
         # Separate columns into arrays
         array_filetype[$i]=$type
         array_owner[$i]=$owner
         array_group[$i]=$group
         echo "${array_filetype[$i]} - ${array_owner[$i]} - ${array_group[$i]}"
        (( i++ ))
    done
    

    但是,一旦您想将数组用于循环内部打印以外的用途,您可能会突然停止工作。由于您将它们设置在子外壳中,因此父级不会受到影响。以下是可能的修复方法之一:

    i=1
    while read type links owner group rest-of-line-we-dont-care-about
    do
         # Separate columns into arrays
         array_filetype[$i]=$type
         array_owner[$i]=$owner
         array_group[$i]=$group
         echo "${array_filetype[$i]} - ${array_owner[$i]} - ${array_group[$i]}"
        (( i++ ))
    done < <(ls -al)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-16
      • 2023-01-23
      • 2014-06-21
      • 2018-09-10
      • 1970-01-01
      • 1970-01-01
      • 2012-07-10
      相关资源
      最近更新 更多