Bash에서 변수 내보내기 및 전역 변수 설정

Bash에서 변수 내보내기 및 전역 변수 설정

내 목표는 실행 중인 모든 테스트 스크립트에서 호출하거나 참조할 수 있는 변수 목록을 만드는 것입니다. 시스템에는 많은 테스트 스크립트가 있지만 변수는 복잡하고 이해하기 어렵습니다. 각 설정 유형마다 동일한 변수 이름이 다릅니다. 이해하기 쉽도록 변수 이름을 바꾸고 동일한 변수를 참조하도록 테스트 스크립트를 수정하고 싶습니다.

다음은 스크립트에서 변수를 정의하는 방법의 예입니다.

RightNumberOfDevices=$( lspci -n | egrep --count "8086:[[xdigitx]][xxdigit]][[:xdigit:]][[:xdigit:]]" )

다른 스크립트에서는 다음을 볼 수 있습니다.

TotalNumberOfDevices=$( lspci -n | egrep --count "8086:[[xdigitx]][xxdigit]][[:xdigit:]][[:xdigit:]]" )

환경 전체에서 해당 변수의 값에 액세스할 수 있도록 일종의 시작 스크립트에서 TotalNumberOfDevices를 선언할 수 있기를 원합니다.

이것은 내가 달성하려는 코드입니다.

ethcounter=$(ifconfig -a | egrep --count "eth[0-9]+")
ethindex0=$((ethcounter-1))

declare -a eth                  #This declares that "eth" is an array variable

for ((i=0; i<=ethindex0; i++))
 do
        eth[$i]=$(ifconfig eth$i | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}' )
        echo "eth[$i]" = "${eth[$i]}"
        set ${eth[$i]}
 done

내가 원하는 것은 각 이더넷 장치의 IP 주소를 저장하고 이를 다른 스크립트에서 사용할 수 있도록 하는 것입니다.

답변1

전역 변수와 지역 변수의 차이점은 쉘 내부에만 있습니다(쉘 함수와 반대).

내보낸 변수와 내보내지 않은 변수의 차이점은 (서브쉘뿐만 아니라) 쉘의 하위 프로세스에만 있습니다(내보낸 변수만 하위 프로세스의 환경 변수가 됩니다).

관련 정보