Bourne 쉘 및 파생 프로그램과 관련하여 나는 IFS
이것이 "파싱"이라는 더 광범위한 프로세스에 필요한 필드 분할(필드를 "단어"로 분할하는 방법 명령)을 위한 동작 프로그램인 것으로 이해합니다.
IFS
(환경 변수로) 설정되지 않은 경우 ( 와 동일 unset IFS
) 쉘이처럼 행동해야 한다IFS의 값은 <space>
, <tab>
및 입니다 <newline>
.
일시적인 심각한 결과는 제쳐두고, 직관적으로 환경 변수를 설정 해제하면 경고 없이 삭제될 것이라고 생각합니다. 이는 rm -rf /*
시스템이 경고 없이 파괴될 수 있는 방법과 유사하며, unset xyz
인위적으로 생성된 비환경 변수를 설정 해제한 다음 발생하는 일과 유사합니다. 삭제합니다).
unset IFS
따라서 실제로 취소하는 것이 아니라 일종의 기본 폴백 동작으로 (다른 곳에서) 재설정하는 것이라고 말하고 싶습니다 .
환경 변수를 설정 해제하면 항상 대체 동작이 발생합니까?
답변1
이는 bash
구체적이지는 않지만 POSIX 동작을 구현하는 모든 셸에 적용됩니다.
설정을 해제하면 변수가 설정 IFS
해제됩니다 . unset IFS
마술처럼 다른 값을 얻지는 않습니다.
POSIX 표준은 명확하게 다음과 같이 명시합니다.
설정되지 않은 경우
IFS
설정되지 않은 변수에 대해 정상적으로 작동해야 합니다. [...]
read
쉘이 필드 분할(따옴표가 없는 값 분할, 입력 분할, "$*"
문자열의 위치 인수 분할)을 수행하려고 할 때 IFS
설정되지 않은 경우 작동해야 한다고 말합니다.마치이 IFS
변수의 값에는 공백, 탭 및 줄 바꿈이 포함됩니다.
이는 유틸리티(이 경우 쉘)가 사용 가능한 경우 변수를 사용하고 그렇지 않으면 잘 정의된 기본 동작을 갖는다고 말하는 것과 다르지 않습니다.
또한 IFS
환경 변수가 아니며 환경 변수가 되어서도 안 됩니다. 즉, 내보낼 필요가 없습니다. 현재 쉘과 내장 read
유틸리티에서만 사용됩니다. 쉘은 IFS
시작 시 공백, 탭 및 줄 바꿈으로 설정됩니다.
특별 섹션도 참조하세요쉘 변수POSIX 표준에서.