답변1
zsh
5.5.1 문서 에서CONDITIONAL EXPRESSIONS
호환성을 위해 구문상 중요하지 않은 인수(일반적으로 변수)가 있는 경우 조건은 표현식이 길이가 0이 아닌 문자열로 확장되는지 여부를 테스트하는 것으로 처리됩니다. 즉, [[ $var ]]는 [[ -n $var ]]와 동일합니다. 가능하면 두 번째 명시적 형식을 사용하는 것이 좋습니다.
소스 트리를 이용하면,
% grep -rl 'if there is a single argument' .
./Doc/Zsh/cond.yo
% git blame ./Doc/Zsh/cond.yo | grep 'if there is a single argument'
d082827c83 (Jun T 2014-05-18 22:03:35 +0900 198) For compat...
검사 결과 git log
코드 변경이 문서보다 이전에 이루어진 것으로 나타났습니다.
commit 9d47e8398d299e53ffe4e7ddf3731d2fedae9948
...
Date: Tue May 13 08:16:50 2014 -0700
32609: [[ $var ]] behaves as [[ -n $var ]] for bash/ksh compatibility
이 파일의 매핑을 모르지만 ChangeLog
5.0.6(Thu Aug 28 19:07:04 2014 +0100)이 이러한 변경을 적용한 첫 번째 버전인 것 같습니다.git tag
zsh
답변2
코드가 수행하는 작업을 더 명확하게 보여줍니다.
[[ -n $ZSH_VERSION ]]
개인적으로 이 경우 는 var 값의 null 허용 여부를 테스트하고 있음을 보여주기 때문에 약간 선호합니다 .
하지만 나는 종종 스크립트에서 부울 값을 나타내는 변수를 사용하고 그에 따라 이름을 지정 is_logged_in
합니다 running_in_background
. 이러한 변수가 내 스크립트에 설정되어 있지 않으면 false
. 이 경우에는 일반 문장처럼 이 부분이 없으면 더 잘 읽기 [[ running_in_background ]]
때문에 를 사용하는 것을 선호합니다 .-n
if [[ running_in_background ]] ; then
echo "something" | logger -t myprog
fi
하지만 제 생각에는 이것은 단지 취향의 문제이므로 편집해서는 안 됩니다.당신의암호.