이 기사는 진행 중인 bash 튜토리얼 시리즈의 일부입니다. 다른 프로그래밍 언어와 마찬가지로 Bash도 변수를 제공합니다.
Bash 변수는 프로그램 수명 동안 필요한 정보를 위한 임시 저장소를 제공합니다.
구문:
VARNAME=VALUE
참고: 변수 할당에서 "=" 기호 주위에는 공백이 없어야 합니다. VAR=VALUE를 사용하면 쉘은 "="를 기호로 보고 명령을 변수 할당으로 처리합니다. VAR =VALUE를 사용할 때 쉘은 VAR이 명령의 이름이어야 한다고 가정하고 실행을 시도합니다.
Shell은 변수 유형에 신경 쓰지 않습니다. 변수는 문자열, 정수 또는 실수를 저장할 수 있습니다.
Example.1 간단한 Bash 변수 할당 사용법
다음 스크립트는 LIST라는 변수를 만들고 "/var/opt/bin" 값을 할당합니다. 변수에 액세스하려면 변수 이름에 $를 접두사로 붙이면 해당 변수에 저장된 값이 표시됩니다.
$ cat sample.sh #!/bin/bash LIST="/var/opt/bin/" ls -l $LIST
위의 스크립트를 실행하면 아래와 같이 /var/opt/bin이 긴 형식으로 나열됩니다.
$ ./sample.sh total 8 drwxrwsr-x 2 bin bin 4096 Jan 29 06:43 softwares drwxr-sr-x 5 root bin 4096 Sep 2 2009 llist
Bash 변수 범위 – 로컬 및 글로벌
Bash에서는 변수를 선언할 필요가 없습니다. 그러나 지금까지 사용하지 않은 변수에 접근하면 경고나 오류 메시지가 표시되지 않습니다. 대신 빈 값이 표시됩니다.
<센터> 센터>예시 2. bash 변수의 빈 값
$ cat var1.sh #!/bin/sh echo "Variable value is: $VAR1" VAR1="GEEKSTUFF" echo "Variable value is: $VAR1" $ ./var1.sh Variable value is: Variable value is: GEEKSTUFF
위에 표시된 것처럼 처음에는 변수에 빈 값이 있고 할당 후에 값을 얻을 수 있습니다. export 명령은 대화형 쉘에서 변수를 내보내는 데 사용됩니다. 내보내기는 변수 범위에 대한 영향을 보여줍니다.
예시 3. 내보내기가 없는 Bash 변수
대화형 셸에서 값으로 변수를 할당하고 셸 스크립트에서 동일한 값에 액세스합니다.
$ VAR2=LINUX $ cat var2.sh #!/bin/bash echo "VAR2=$VAR2" VAR2=UNIX echo "VAR2=$VAR2"
이제 위의 스크립트를 아래와 같이 실행합니다.
$ ./var2.sh VAR2= VAR2=UNIX
여전히 변수 VAR2에 대해 빈 값이 표시됩니다. 쉘은 현재 쉘에서만 LINUX와 함께 변수 VAR2를 저장합니다. var2.sh를 실행하는 동안 쉘을 생성하고 스크립트를 실행합니다. 따라서 변수 VAR2는 생성된 쉘에 값을 갖지 않습니다. 아래와 같이 쉘 스크립트를 포함하여 다른 프로그램에 상속되도록 변수를 내보내야 합니다.
예제 4. Bash 변수 내보내기
$ export VAR2=LINUX $ cat var2.sh #!/bin/bash echo "VAR2=$VAR2" VAR2=UNIX echo "VAR2=$VAR2"
이제 위의 스크립트를 실행하십시오.
$ ./var2.sh VAR2=LINUX VAR2=UNIX $ $echo $VAR2 LINUX
이제 쉘 스크립트 var2.sh를 실행한 후 VAR2의 값이 LINUX임을 알 수 있습니다. 현재 셸에서 스크립트를 실행하지 않는 한 변수는 대화형 셸로 다시 전달되지 않기 때문입니다.
Bash 변수 선언
bash에서 선언문을 사용하여 변수에 할당된 값을 제한할 수 있습니다. 변수의 속성을 제한합니다. 선언문의 옵션은 변수의 유형을 결정하는 데 사용됩니다.
구문:
declare option variablename
- 선언은 키워드입니다
- 옵션은 다음과 같을 수 있습니다.
- -r 읽기 전용 변수
- -i 정수 변수
- -배열 변수
- -f 함수
- -x는 환경을 통해 후속 명령을 선언하고 내보냅니다.
예시 5. 선언을 이용한 Bash 변수 선언
$ cat declar.sh #!/bin/bash declare -i intvar intvar=123 # Assigning integer value. echo $intvar intvar=12.3 #Trying to store string type value to an integer variable echo $intvar declare -r rovar=281 rovar=212 # Trying to change the readonly variable.
아래 실행에서 변수에 유효하지 않은 데이터를 할당할 때 오류 메시지를 확인할 수 있습니다.
$ ./declar.sh 123 t.sh: line 6: 12.3: syntax error: invalid arithmetic operator (error token is ".3") 123 t.sh: line 11: rovar: readonly variable
전역 Bash 변수
전역 변수는 환경 변수라고도 하며 모든 셸에서 사용할 수 있습니다. printenv 명령은 모든 환경 변수를 표시하는 데 사용됩니다.
$ printenv SHELL=/bin/bash HISTSIZE=1000 SSH_TTY=/dev/pts/1 HOME=/root LOGNAME=root CVS_RSH=ssh
로컬 Bash 변수
지역 변수는 코드 블록 내에서만 볼 수 있습니다. local 은 지역 변수를 선언하는 데 사용되는 키워드입니다. 함수에서 로컬 변수는 해당 함수 블록 내에서만 의미를 갖습니다.
예제 6. 전역 및 로컬 Bash 변수
$ cat localvar.sh #!/bin/bash pprint() { local lvar="Local content" echo -e "Local variable value with in the function" echo $lvar gvar="Global content changed" echo -e "Global variable value with in the function" echo $gvar } gvar="Global content" echo -e "Global variable value before calling function" echo $gvar echo -e "Local variable value before calling function" echo $lvar pprint echo -e "Global variable value after calling function" echo $gvar echo -e "Local variable value after calling function" echo $lvar
위의 스크립트를 실행합니다.
$ sh t.sh Global variable value before calling function Global content Local variable value before calling function Local variable value with in the function Local content Global variable value with in the function Global content changed Global variable value after calling function Global content changed Local variable value after calling function
위의 출력에서 지역 변수는 함수 호출 전후에 빈 값만 가질 것입니다. 그 범위는 함수 내에서만 가능합니다. 전역 변수는 함수 실행 후에도 업데이트된 값을 유지하는 반면 함수에서 사라졌습니다.