[英]Fill in multiple arrays from command's output - 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
提前致谢。
Arsene
您可以做的直接改进是,不阅读整个行:
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.