변수를 설정 해제하는 대신 명시적으로 변수를 설정하여 0
쉘 스크립트의 특정 기능을 비활성화하는 것이 관례입니까? 좀 더 공식적인 접근 방식은 무엇입니까?
내가 묻는 이유는 변수를 설정 해제하면 설정되지 않은 경우 와 같은 구문을 X
사용할 수 있기 때문 입니다 . 여전히 바람직하지 않은 상황에서 평가가 수행되도록 명시적 으로 설정합니다 .${X:-foo}
foo
X
X
0
foo
답변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--)