マップファイル/readarrayの使い方

マップファイル/readarrayの使い方

次のようなコードがあります。

while read -r col1 col2 col3 col4 col5 col6 col7 col8 TRASH; do 
        echo -e "${col1}\n${col2}\n${col3}\n${col4}\n${col5}\n${col6}\n"
done< <(ll | tail -n+2 | head -2)

(私は実際にls/を使用していませんが、llこの編集された例は私が経験しているのと同じ問題を示していると思います。)

問題は、失敗した場合に条件文が必要なため、ll | tail -n+2 | head -2マッピングファイルを生成し、スクリプトを介してread渡しました。地図ファイルが正しく作成されていますが、正しく読み取れるようにリダイレクトする方法がわかりません。

パスワード

if ! mapfile -t TEST_ARR < <(ll | tail -n+2 | head -2); then
        exit 1
fi
while read -r col1 col2 col3 col4 col5 col6 col7 col8 TRASH; do 
        echo -e "${col1}\n${col2}\n${col3}\n${col4}\n${col5}\n${col6}\n"
done<<<"${TEST_ARR[@]}"

マップファイルの内容

declare -a TEST_ARR=(
        [0]="drwxr-xr-x@ 38 wheel   1.2K Dec  7 07:10 ./" 
        [1]="drwxr-xr-x  33 wheel   1.0K Jan 18 07:05 ../"
)

出力

$ while read -r col1 col2 col3 col4 col5 col6 col7 col8 TRASH; do
>             echo -e "${col1}\n${col2}\n${col3}\n${col4}\n${col5}\n${col6}\n"
>     done<<<"${TEST_ARR[@]}"
drwxr-xr-x@
38
wheel
1.2K
Dec
7

この場合、文字列のリダイレクトは明らかに間違っていますが、配列をリダイレクトする方法がわかりません。

ベストアンサー1

配列を繰り返しながら要素を列に読み込みたいと思います。

for ele in "${TEST_ARR[@]}"
do
  read -r col1 col2 col3 col4 col5 col6 col7 col8 TRASH <<< "$ele"
  echo -e "${col1}\n${col2}\n${col3}\n${col4}\n${col5}\n${col6}\n"
done

おすすめ記事