如果我想读取一个字符串并将其拆分到给定的分隔符上,我可以设置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
有吗?