前面的字段中是否包含分隔符?

前面的字段中是否包含分隔符?

如果我是正确的,在 bash 中,readarray 使用一些分隔符将输入分隔到字段中,并且分隔符默认为换行符。

与分隔符不同,分隔符包含在其前面的字段中(如果我指定-tto readarray,它将是分隔符而不是定界符)。为了验证这一点,我有一个文件

$ cat f10
1
2
3

为什么下面显示前面的字段不包含分隔符(换行符)?谢谢。

$ readarray myarr < f10
$ printf "%s" ${myarr[1]}
2$ printf "%s" ${myarr[2]}
3$ printf "%s" ${myarr[0]}
1$

我还有另一个文件:

$ cat f1
1 2 3

是否表明当分隔符为 时2,分隔符包含在其前面的字段中?为什么1和2之间以及2和3之间的空格被删除?

$ readarray -d 2 myarr < f1
$ printf "%s" ${myarr[0]}
12$ printf "%s" ${myarr[1]}
3$

答案1

readarray/mapfile将终止符留在那里 换行符在那里,但使用默认值 时IFS,换行符${myarr[0]}会在分词中丢失。引用变量扩展来防止这种情况发生。

$ cat f10
1
2
3
$ readarray myarr < f10

$ printf "%s" "${myarr[0]}"
1
$ printf "%q\n" "${myarr[0]}"
$'1\n'

$ IFS=
$ printf "%q\n" ${myarr[0]}
$'1\n'

与分隔符不同,分隔符包含在其前面的字段中

我不太确定这是否是一个普遍接受的含义?即使是这样回答链接到你的链接后面说“事物之间有一个分隔符”。这字典定义则意味着相反的情况:

分隔符
1. 界定、分隔的事物。
逗号分隔文件以逗号作为分隔符,分隔文件的每个字段。

相关内容