환경 변수를 설정 해제하면 항상 대체 동작이 발생합니까?

환경 변수를 설정 해제하면 항상 대체 동작이 발생합니까?

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 표준에서.

관련 정보