前のフィールドに区切り文字が含まれていますか?

前のフィールドに区切り文字が含まれていますか?

私が正しい場合、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. 定義または分離すること。
カンマ区切りファイルは、カンマを区切り文字として使用して、ファイル内の各フィールドを区切ります。

関連情報