개발관련/other

Bash에 변수가 설정되어 있는지 확인하는 방법

Rateye 2022. 3. 29. 13:19
728x90
반응형
질문 : Bash에 변수가 설정되어 있는지 확인하는 방법은 무엇입니까?

Bash에 변수가 설정되어 있는지 어떻게 알 수 있습니까?

예를 들어, 사용자가 함수에 첫 번째 매개 변수를 제공했는지 어떻게 확인합니까?

function a {
    # if $1 is set ?
}
답변

(통상) 올바른 방법

if [ -z ${var+x} ]; then echo "var is unset"; else echo "var is set to '$var'"; fi

여기서 ${var+x}var 가 설정되지 않은 경우 아무것도 평가하지 않는 매개 변수 확장 이고 그렇지 않은 경우 x

따옴표 삽입

따옴표를 생략 할 수 있습니다 ( "${var+x}" 대신 ${var+x} 라고 말할 수 있음).이 구문과 사용법은 따옴표가 필요없는 것으로 만 확장되도록 보장하기 때문입니다 ( x (단어 분리를 포함하지 않으므로 따옴표가 필요하지 않음) 또는 아무것도하지 않습니다 (결과적으로 [ -z ] [ -z "" ] 수행하는 것과 동일한 값 (true)으로 편리하게 평가됨)).

그러나 따옴표는 안전하게 생략 할 수 있고 모든 사람에게 즉시 명확하지는 않지만 ( 이 따옴표 설명의 첫 번째 작성자이자 주요 Bash 코더 인 경우에도 분명하지 않음) 솔루션을 작성하는 것이 더 낫습니다. [ -z "${var+x}" ] 와 같이 따옴표를 사용하면 가능한 매우 적은 비용으로 O (1) 속도 패널티가 발생합니다. 첫 번째 저자는 또한이 솔루션을 사용 하여이 솔루션을 사용하여 코드 옆에 주석으로 추가 하여이 답변에 대한 URL을 제공했으며 이제 따옴표를 안전하게 생략 할 수있는 이유에 대한 설명도 포함합니다.

 

(흔히) 잘못된 방법

if [ -z "$var" ]; then echo "var is blank"; else echo "var is set to '$var'"; fi

이것은 설정되지 않은 변수와 빈 문자열로 설정된 변수를 구별하지 않기 때문에 종종 잘못된 것입니다. 즉, var='' 이면 위의 솔루션은 "var is blank"를 출력합니다.

unset과 "set to the empty string"의 구분은 사용자가 확장 또는 추가 속성 목록을 지정해야하는 상황에서 필수적이며 지정하지 않으면 기본값이 비어 있지 않은 값으로 설정되는 반면 빈 문자열을 지정하면 스크립트가 빈 확장 또는 추가 속성 목록을 사용하도록합니다.

그러나 모든 시나리오에서 구별이 필수적인 것은 아닙니다. 이 경우 [ -z "$var" ] 은 괜찮습니다.

 

출처 : https://stackoverflow.com/questions/3601515/how-to-check-if-a-variable-is-set-in-bash
728x90
반응형