我有一些类似的代码:
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)
在这种情况下,字符串重定向显然是错误的,但我不确定如何重定向我的数组。
在我看来,您想遍历数组,将元素读入列:
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)