유사한 구조는 IFS= read -r var
Bash에서 변수에 대한 입력 행을 읽는 "표준" 방식으로 간주되는 경우가 많습니다(예:unix.SE에서).
$IFS
null을 설정하는 것이 종종 유익한 이유, 즉 단어 분리를 제어(방지)하는 이유는 분명합니다 . 그러나 읽을 때 이것이 특별히 필요한 이유를 이해하는 데 어려움을 겪고 있습니다.하나의바꾸다? Bash 매뉴얼은 다음과 같이 말합니다:
이름보다 단어가 더 많은 경우 나머지 단어와 중간 구분 기호는 성에 할당됩니다.
따라서 IFS를 변경하지 않더라도 read
단일 변수를 전달하면 필요에 따라 전체 행을 해당 변수에 저장해야 하지 않습니까? $IFS
이 경우 null을 설정하는 이유는 무엇입니까?
답변1
다음 예를 고려하세요( $IFS
기본값을 사용하려면 설정하지 않음).
$ unset IFS
$ IFS= read -r foo <<<" a "
$ printf "%q\n" "$foo"
\ a\
$ read -r foo <<<" a "
$ printf "%q\n" "$foo"
a
또는 다른 값이 포함된 경우(bash 또는 zsh를 제외한 다른 POSIX 유사 쉘에서):
$ IFS=:
$ IFS= read -r foo <<< "a:"
$ printf "%q\n" "$foo"
a:
$ read -r foo <<< "a:"
$ printf '%q\n' "$foo"
a
이 사건은 다음과 같습니다질문에 언급된 게시물(강조하다):
이제 하나의 매개변수만 전달하면
read line
Still 이 되지 않습니다read remaining_words
. 백슬래시 처리가 아직 완료되었습니다.IFS 공백 문자²는 여전히 시작과 끝에서 제거됩니다..