赋值IFS=$'\0'
不会使空字符成为分隔符,因为Bash 变量不能包含空字符。IFS=$'\0'
等效于IFS=
,您可以通过以下方式进行验证:
bash-4.3$ IFS=$'\0'
bash-4.3$ echo ${#IFS}
0
并且IFS=
根据定义意味着根本没有分词(参见Bash 参考手册)。
您可以做的是使用内置-d
选项一一读取以空分隔的项目。根据链接文件,read
-d delim
的第一个字符delim
用于终止输入行,而不是换行符。
我们可以使用空字符串delim
来获得所需的行为。
示例(我冒昧地在您的示例中添加了空格,以演示它如何实现所需的 - 没有在空格上分割):
bash-4.3$ printf 'alpha with whitespace\0bravo with whitespace\0charlie with whitespace' > delta.txt
bash-4.3$ { read -r -d '' mike; IFS= read -r -d '' november; IFS= read -r -d '' oscar; echo $mike; echo $november; echo $oscar; } < delta.txt
alpha with whitespace
bravo with whitespace
charlie with whitespace
我还使用该-r
选项在输入文件中保留反斜杠。当然,您可以在开头替换< delta.txt
为 a 。cat delta.txt |
我知道逐一阅读很烦人,但我想不出更好的办法。