내가 맞다면 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
종결자와 개행 문자를 그대로 두지만, 기본값을 사용하면 break라는 단어에서 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. 정의하거나 분리하는 것.
쉼표로 구분된 파일은 쉼표를 구분 기호로 사용하여 파일의 각 필드를 구분합니다.