설정 해제 vs. 변수를 비워 두도록 설정
저는 현재 bash 테스트 프레임워크를 작성하고 있습니다.테스트 기능에서는 양쪽 표준 bash 테스트([[
)와 함께 사전 정의된 매처도 사용할 수 있습니다.Matchers는 '[[]'의 래퍼이며 반환 코드를 반환하는 것 외에 무엇을 예상했는지를 나타내는 의미 있는 메시지를 설정합니다.
예:
string_equals() {
if [[ ! $1 = $2 ]]; then
error_message="Expected '$1' to be '$2'."
return 1
fi
}
따라서 매처가 사용되었지만 실패하면 error_message만 설정됩니다.
이제, 어느 시점에서, 저는 테스트가 성공했는지 테스트합니다.성공했을 경우는 녹색으로, 실패했을 경우는 빨간색으로 인쇄합니다.
또한 error_message 세트가 있을 수 있으므로 메시지가 존재하는지 테스트하고 인쇄한 후 설정을 해제합니다(다음 테스트에서는 메시지가 설정되지 않을 수 있습니다).error_message
):
if [[ $error_message ]]; then
printf '%s\n' "$error_message"
unset -v error_message
fi
여기서 궁금한 것은 변수를 설정 해제하는 것이 좋은지 아니면 그냥 ''로 설정하는 것이 좋은지입니다.
error_message=''
어떤 게 더 나아요?그게 실제로 차이를 만들까요?아니면 메시지가 설정되었음을 나타내는 플래그를 추가해야 할 수도 있습니다.
대부분의 경우 다른 점은 없습니다.set -u
:
/home/user1> var=""
/home/user1> echo $var
/home/user1> set -u
/home/user1> echo $var
/home/user1> unset var
/home/user1> echo $var
-bash: var: unbound variable
따라서 변수를 어떻게 테스트하느냐에 따라 달라집니다.
설정이 되어 있는 경우는, 이하의 방법으로 테스트하는 것을 추천합니다.
[[ -n $var ]] # True if the length of $var is non-zero
또는
[[ -z $var ]] # True if zero length
전술한 바와 같이 unset를 사용하는 것은 어레이에서도 다릅니다.
$ foo=(4 5 6)
$ foo[2]=
$ echo ${#foo[*]}
3
$ unset foo[2]
$ echo ${#foo[*]}
2
따라서 어레이 인덱스 2를 설정 해제하면 어레이에서 해당 요소를 제거하고 어레이 크기(?)를 줄일 수 있습니다.
내가 직접 테스트를 해봤는데..
foo=(5 6 8)
echo ${#foo[*]}
unset foo
echo ${#foo[*]}
그 결과..
3
0
따라서 어레이 전체를 설정 해제하면 어레이가 완전히 삭제됩니다.
위의 코멘트를 바탕으로 간단한 테스트를 실시합니다.
isunset() { [[ "${!1}" != 'x' ]] && [[ "${!1-x}" == 'x' ]] && echo 1; }
isset() { [ -z "$(isunset "$1")" ] && echo 1; }
예:
$ unset foo; [[ $(isunset foo) ]] && echo "It's unset" || echo "It's set"
It's unset
$ foo= ; [[ $(isunset foo) ]] && echo "It's unset" || echo "It's set"
It's set
$ foo=bar ; [[ $(isunset foo) ]] && echo "It's unset" || echo "It's set"
It's set
언급URL : https://stackoverflow.com/questions/12262696/using-unset-vs-setting-a-variable-to-empty
'programing' 카테고리의 다른 글
ID 열이 하나만 있는 테이블에 행 삽입 (0) | 2023.04.21 |
---|---|
웹 API에서 속성이 직렬화되는 것을 방지하다 (0) | 2023.04.21 |
"내선번호 설정으로 인해 요청하신 페이지를 제공할 수 없습니다." 오류 메시지 (0) | 2023.04.21 |
EPPlus의 컬럼 동결(Excel 분할 함수) (0) | 2023.04.21 |
현재 분기의 끝부분이 원격 분기의 끝부분 뒤에 있기 때문에 업데이트가 거부되었습니다. (0) | 2023.04.21 |