如果我是正确的,在 bash 中,readarray
使用一些分隔符将输入分隔到字段中,并且分隔符默认为换行符。
与分隔符不同,分隔符包含在其前面的字段中(如果我指定-t
to 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. 界定、分隔的事物。
逗号分隔文件以逗号作为分隔符,分隔文件的每个字段。