2013-03-16 23 views
0

我正在寻找从命令的输出使用Bash填充多个数组的最佳方法。从命令的输出填充多个数组 - 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 

感谢。

温格

回答

3

立即得到改善,你能做的就是看不懂行作为一个整体:

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)