如何在一次循环一个切片的同时进给?

时间:2016-01-08 11:03:12

标签: bash while-loop record ifs

如果我想读取一个字符串并将其拆分到给定的分隔符上,我可以设置IFS并将字符串切片存储在一个数组中。然后我可以用它的项目做任何我想做的事情:

while IFS=_ read -r -a myarray; do
    printf "%s -\n" "${myarray[@]}"
done <<< "a_b"

返回:

$ while IFS=_ read -r -a myarray; do echo "hello"; printf "%s -\n" "${myarray[@]}"; done <<< "a_b"
hello
a -
b -

但是,我有时想在每个循环中只读取其中一个字段。所以我想知道是否有一种方法可以每次都通过切片来提供这个while循环。也就是说,在第一次迭代中,read仅获得a,而第二次只获得b,依此类推。

我找到了改变循环方式的方法:改为<<< "a_b"我使用tr将每个_替换为< <(tr "_" "\n" <<<"a_b")的新行来拆分它:

$ while IFS=_ read -r -a myarray; do echo "hello"; printf "%s -\n" "${myarray[@]}"; done < <(tr "_" "\n" <<<"a_b")
hello
a -
hello
b -

然而,我想知道:还有其他办法吗?由于我们有IFS来更改字段分隔符,Bash是否有任何其他变量来设置&#34;记录分隔符&#34;例如awk有吗?

0 个答案:

没有答案