bash: 환경에 특정 변수가 존재하는지 확인하시겠습니까?

bash: 환경에 특정 변수가 존재하는지 확인하시겠습니까?

에서는 bash주어진 변수가 정의되어 있고 값이 포함되어 있는지 확인하는 여러 가지 방법이 있다는 것을 알고 있습니다. 그런데, 지역 변수뿐만 아니라 주어진 변수가 환경에 존재하는지 확인하고 싶습니다. 예를 들어...

VAR1=value1 # local variable
export VAR2=value2 # environment variable
if [[ some_sort_of_test_for_env_var VAR1 ]]
then
  echo VAR1 is in the environment
else
  echo VAR1 is not in the environment
fi
if [[ some_sort_of_test_for_env_var VAR2 ]]
then
  echo VAR2 is in the environment
else
  echo VAR2 is not in the environment
fi

some_sort_of_test_for_env_var위의 bash 코드가 다음 두 줄을 인쇄하도록 정의하는 방법은 무엇입니까 ?

VAR1 is not in the environment 
VAR2 is in the environment

env변수 이름에 대한 작업을 실행 하고 수행하기 위해 쉘 함수를 정의할 수 있다는 것을 알고 있지만 grep주어진 변수가 환경에 있는지 확인하는 더 직접적인 "bash와 같은" 방법이 있는지 궁금합니다. 지역 변수.

미리 감사드립니다.

답변1

제목과 본문 문구가 매우 다릅니다.

귀하의 제목은 불가능하거나 의미가 없습니다. Bash의 모든 환경 변수는 쉘 변수이기도 하므로 환경 변수는 환경에 "그냥" 존재할 수 없습니다.

당신의 몸을 위해

if declare -p VARNAME | grep -q '^declare .x'; then # it's in the environment
# or typeset if you prefer the older name

[[특별히 구문을 원하는 경우

if [[ $(declare -p VARNAME) == declare\ ?x* ]] # ditto

답변2

새 셸을 생성하고 변수가 존재하는지 쿼리할 수 있습니다.

$ bash -c '[[ -v VAR2 ]]' && echo variable is exported || echo variable is not exported
variable is exported

$ bash -c '[[ -v VAR1 ]]' && echo variable is exported || echo variable is not exported
variable is not exported

관련 정보