bash를 사용하면 변수가 비어 있는지 확인하는 가장 좋은 방법은 무엇입니까?bash의 비 설정 변수와 빈 변수의 차이점
내가 사용하는 경우이 설정되지 않은 변수에 대해 작동하는 포럼에서 제안하지만 변수가 설정하지만 비어있을 때 그것이 사실로
if [ -z "$VAR" ]
. 제안 사항?
bash를 사용하면 변수가 비어 있는지 확인하는 가장 좋은 방법은 무엇입니까?bash의 비 설정 변수와 빈 변수의 차이점
내가 사용하는 경우이 설정되지 않은 변수에 대해 작동하는 포럼에서 제안하지만 변수가 설정하지만 비어있을 때 그것이 사실로
if [ -z "$VAR" ]
. 제안 사항?
if [ `set | grep '^VAR=$'` ]
을이 문자열 검색 "VAR ="설정 변수의 목록.
${var+set}
은 변수가 설정되지 않은 경우는 아무 것도 대체하지 않으며 빈 문자열을 포함하여 아무것도 설정하지 않은 경우 set
으로 대체합니다. ${var:+set}
은 변수가 비어 있지 않은 문자열로 설정된 경우에만 set
으로 바꿉니다. 당신은 어느 경우를 테스트하려면이 옵션을 사용할 수 있습니다
if [ "${foo+set}" = set ]; then
# set, but may be empty
fi
if [ "${foo:+set}" = set ]; then
# set and nonempty
fi
if [ "${foo-unset}" = unset ]; then
# foo not set or foo contains the actual string 'unset'
# to avoid a potential false condition in the latter case,
# use [ "${foo+set}" != set ] instead
fi
if [ "${foo:-unset}" = unset ]; then
# foo not set or foo empty or foo contains the actual string 'unset'
fi
당신이 -' 반대 방식으로 작동합니다 '것을 추가 할 수 있습니다이 답변을 완성하기 위해, 즉'$ {foo-없이 unset}'foo가 설정되지 않은 경우 'unset'을 반환합니다. 이것은 마른 실행 스크립트에 유용합니다. 실제로 업로드를 수행하기 위해'DRYRUN = upblog.sh'로 실행되어야하는'rsync -avuz $ {DRYRUN --- dry-run} $ HOME/blog/webserver : blog /' –
이것은 허용 된 대답이어야합니다. @ jcomeau_ictx의 뛰어난 코멘트가 포함 된 수정 된 답변. – dev
잘, 여기에 변수가 설정되지 않은 경우
$ s=""
$ declare -p s
declare -- s=""
$ unset s
$ declare -p s
bash: declare: s: not found
오류 메시지가 발생합니다 하나의 방법입니다.
원래의 질문은 빈 문자열로 설정된 변수와 전혀 설정되지 않은 변수를 구별하는 방법이었습니다. 두 경우 모두 공백으로 반환됩니다. –
예, 질문을 잘못 이해했습니다. 내 편집을 참조하십시오. – kurumi
누가 당신을 투표했는지 모르겠지만 당신의 해결책은 저에게 효과적입니다! – green69
나는 틀린 질문에 처음으로 대답했다. 다음은 수정 된 답변입니다. –
내 downvote는 이것이 unidiomatic, 어색하고 비효율적이기 때문입니다. 셸에는이 기능이 내장되어 있습니다. 또한, 당신은 [쓸데없는 backticks의 사용] (http://www.iki.fi/era/unix/award.html#backticks)과 명백하게 [if 문이 무엇을하는지에 대한 불완전한 이해가 있습니다.] http://stackoverflow.com/questions/36371221/bash-if-statement-too-many-arguments/36371520#36371520) – tripleee