이것은 예이다https://unix.stackexchange.com/a/56846/674
어떤 유형의 변수가 선언되었는지 테스트하는 또 다른 bash 관련 방법은 해당 변수가 다음에 나열되어 있는지 확인하는 것입니다
${!PREFIX*}
.case " ${!foobar*} " in *" foobar "*) echo "foobar is declared";; *) echo "foobar is not declared";; esac
내 말이 맞다면 매개변수를 선언 취소하기 위해
unset
내장 기능을 사용합니다. 이unset
사건은 인용문에서 말하는 것과 같습니다.$ unset foobar $ case " ${!foobar*} " in > *" foobar "*) echo "foobar is declared";; > *) echo "foobar is not declared";; > esac foobar is not declared
그러나
declare
사례 d는 다음을 수행하지 않습니다.$ unset foobar $ declare foobar $ case " ${!foobar*} " in > *" foobar "*) echo "foobar is declared";; > *) echo "foobar is not declared";; > esac foobar is not declared
매개변수가 선언되었는지 테스트하는 올바른 방법입니까?
- 그리고
" ${!foobar*} "
매개변수 확장 전후에 공백이 있는 이유는 무엇입니까? 배열이나 사전인 경우 와 변수이지만 배열이나 사전이 아닌 경우에도foobar
작동합니까 ?
답변1
변수를 값(null일 수 있음)으로 선언해야 하는 것 같습니다.
unset foobar; declare foobar=
Case 문은 "foobar 선언됨"을 생성합니다.
*" foobar "*
특정 변수 이름을 감지할 수 있도록 따옴표와 공백을 사용합니다.목록반환된 변수 이름 수${!foobar*}
:$ unset foobar; foobarbaz=1; foobarquz=2 $ echo " ${!foobar*} " foobarbaz foobarquz
Case 문은 "foobar가 선언되지 않았습니다"를 생성합니다.