unset 사용 vs. 변수를 비워두기
저는 현재 테스트 함수에서 표준 bash 테스트 ( [[
)와 사전 정의 된 매처를 모두 사용할 수 있는 bash 테스트 프레임 워크를 작성 중 입니다. Matchers는 '[['에 대한 래퍼이며 반환 코드를 반환하는 것 외에도 예상 한 내용을 나타내는 의미있는 메시지를 설정합니다.
예:
string_equals() {
if [[ ! $1 = $2 ]]; then
error_message="Expected '$1' to be '$2'."
return 1
fi
}
따라서 matcher가 사용되어 실패하면 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' 카테고리의 다른 글
Cocoa의 기본 유형과 함께 performSelector : withObject : afterDelay :를 사용하는 방법? (0) | 2020.08.25 |
---|---|
문자열에 대한 정규식에 포함됩니까? (0) | 2020.08.25 |
웹 페이지에서 Excel로 표를 내보내려면 어떻게해야합니까? (0) | 2020.08.25 |
자바에서 URL 쿼리 매개 변수 인코딩 (0) | 2020.08.25 |
Java 용 Scene Builder의 최신 버전을 정확히 어디에서 다운로드 할 수 있습니까? (0) | 2020.08.25 |