gpt4 book ai didi

bash - 读取 nul 分隔字段

转载 作者:行者123 更新时间:2023-11-29 09:13:01 25 4
gpt4 key购买 nike

给定这个文件

printf 'alpha\0bravo\0charlie' > delta.txt

我想将字段读取到单独的变量中。我使用的原因空分隔符是因为字段将包含文件路径,其中可以包含除 null 之外的任何字符。我尝试了这些命令:

IFS= read mike november oscar < delta.txt
IFS=$'\0' read mike november oscar < delta.txt

但是字段没有被正确分割

$ echo $mike
alphabravocharlie

最佳答案

作业 IFS=$'\0'不会使空字符成为分隔符,因为 Bash variables cannot hold null characters . IFS=$'\0'相当于IFS= ,您可以通过执行以下操作来验证:

bash-4.3$ IFS=$'\0'
bash-4.3$ echo ${#IFS}
0

IFS=根据定义,完全没有分词(参见 Bash Reference Manual)。

您可以做的是使用 -d 一个一个地读取空分隔项。 read builtin 的选项.根据链接文档,

-d delim

The first character of delim is used to terminate the input line, rather than newline.

我们可以为 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.txtcat delta.txt |在一开始。

我知道逐条阅读很烦人,但我想不出更好的办法。

关于bash - 读取 nul 分隔字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29885176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com