如何使用地图文件

jes*_*e_b 2 bash here-string

我有一些类似的代码:

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)
Run Code Online (Sandbox Code Playgroud)

(我实际上并没有使用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[@]}"
Run Code Online (Sandbox Code Playgroud)

地图文件内容

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 ../"
)
Run Code Online (Sandbox Code Playgroud)

输出

$ 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
Run Code Online (Sandbox Code Playgroud)

在这种情况下,字符串重定向显然是错误的,但我不确定如何重定向我的数组。

Jef*_*ler 5

在我看来,您想遍历数组,将元素读入列:

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
Run Code Online (Sandbox Code Playgroud)