환경 변수를 설정 해제하는 것과 0으로 설정하는 것

환경 변수를 설정 해제하는 것과 0으로 설정하는 것

변수를 설정 해제하는 대신 명시적으로 변수를 설정하여 0쉘 스크립트의 특정 기능을 비활성화하는 것이 관례입니까? 좀 더 공식적인 접근 방식은 무엇입니까?

내가 묻는 이유는 변수를 설정 해제하면 설정되지 않은 경우 와 같은 구문을 X사용할 수 있기 때문 입니다 . 여전히 바람직하지 않은 상황에서 평가가 수행되도록 명시적 으로 설정합니다 .${X:-foo}fooXX0foo

답변1

나는 항상 그것을 사용할 것이다 unset.

다양한 형태의 변수 확장을 통해 설정 여부를 확인할 수 있습니다.

echo ${X:- X is set and not empty}
echo ${X- X is set, maybe empty}

답변2

내가 기억했던 것보다 더 미묘했다. 나는 이전에 := 버전을 사용해 본 적이 없습니다. 왼쪽에서 오른쪽으로 평가되며 할당은 즉시 적용됩니다.

:이는 내장된 "아무 작업도 수행하지 않음" 명령의 흥미로운 목적 일 수도 있습니다 .

Paul--) unset X
Paul--) printf '%s\n' "${#X}" "${X:-foo}" \
>                     "${#X}" "${X:=foo}" \
>                     "${#X}" "${X:-why}"
0
foo
0
foo
3
foo
Paul--) 

관련 정보