0

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

前もって感謝します。

アルセーヌ

4

1 に答える 1

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

ただし、ループ内で印刷以外の目的で配列を使用すると、突然機能しなくなる可能性があります。サブシェルで設定しているため、親は影響を受けません。考えられる修正の 1 つを次に示します。

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)
于 2013-03-16T22:45:57.097 に答える