내 목표는 실행 중인 모든 테스트 스크립트에서 호출하거나 참조할 수 있는 변수 목록을 만드는 것입니다. 시스템에는 많은 테스트 스크립트가 있지만 변수는 복잡하고 이해하기 어렵습니다. 각 설정 유형마다 동일한 변수 이름이 다릅니다. 이해하기 쉽도록 변수 이름을 바꾸고 동일한 변수를 참조하도록 테스트 스크립트를 수정하고 싶습니다.
다음은 스크립트에서 변수를 정의하는 방법의 예입니다.
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
전역 변수와 지역 변수의 차이점은 쉘 내부에만 있습니다(쉘 함수와 반대).
내보낸 변수와 내보내지 않은 변수의 차이점은 (서브쉘뿐만 아니라) 쉘의 하위 프로세스에만 있습니다(내보낸 변수만 하위 프로세스의 환경 변수가 됩니다).