Bash 변수란 무엇이며 어떻게 사용할 수 있나요?

Bash는 전체 문자열을 단일 변수에 매핑할 수 있게 하여 사용과 스크립트 작성을 간소화합니다. 이들은 어떻게 작동하며, 어떻게 사용할 수 있을까요? 알아봅시다.
목차
- Bash 변수란?
- 실시간 변수
- 스크립트 내 변수
- 영구 Bash 변수 및 별칭
- 배열 만들기
- 서브셸 변수 실행
- 부분 문자열 조작
- 자주 묻는 질문
Bash 변수란?
변수는 다양한 알파벳 숫자 값을 포함할 수 있는 기억하기 쉬운 이름입니다. 이들은 유용하며, 동일한 기능을 서로 다른 값에 적용할 수 있게 해주어 스크립트나 코드 조각을 다시 작성할 필요가 없습니다. 또한 개별 값을 다루는 대신 모든 값에 대해 동일한 이름을 사용할 수 있어 스크립트나 코드 조각을 쉽게 작성할 수 있습니다.
실시간 변수
Bash는 변수 사용을 허용합니다. 현재 Bash 세션 동안 즉석에서 변수를 생성하고 재사용할 수 있습니다. 이들은 Bash 사용을 여러 가지 방법으로 도와줄 수 있으며, 현재 세션이 끝나면 사라집니다.
예를 들어, 여러 사이트를 방문하고 있다고 가정해 보겠습니다. 연구를 하거나 데이터를 스크랩하고 다음과 같은 변수를 생성할 수 있습니다:
sitea=https://www.maketecheasier.com
그 후, Firefox로 우리 사이트를 방문하고 싶다면, 다음과 같이 입력하면 됩니다:
firefox $sitea
훨씬 더 쉽고 가독성이 높습니다. $sitea 변수는 수동으로 내용을 변경하거나 Bash 세션이 끝날 때까지 사이트에 매핑된 상태로 유지됩니다. 물론 siteb, sitec, sited와 같은 더 많은 변수를 생성할 수 있습니다.
새 변수를 설정할 때 원하는 이름을 사용할 수 있으며, 그 안에 알파벳 숫자 문자열을 저장할 수 있습니다. 그러나 기본적으로 대소문자를 구분하므로 $sitea는 $SiteA와 같지 않다는 점을 유의하세요. 또한, 특수 문자가 포함된 문자열을 저장할 때는 따옴표를 사용해야 합니다(공백 포함).
팁: Bash에 익숙하지 않은 분들은 이러한 기본 Bash 명령어로 시작하세요.
스크립트 내 변수
Bash의 변수는 스크립트를 작성할 때 더 유용합니다. 변수는 단일 스크립트를 작성할 수 있게 해주며, 이를 통해 서로 다른 문자열을 반복하거나 사용자 정의 데이터 조각에 작용할 수 있습니다. 예를 들어, 모든 사용자가 자신의 컴퓨터에서 사용할 수 있는 스크립트를 작성하고 있지만, 매번 개인화된 인사를 표시한다고 가정해 보겠습니다. 변수가 없으면 각 사용자에 대해 스크립트의 다른 버전을 작성해야 합니다. 변수를 사용하면 스크립트를 동일하게 유지하고 사용자 이름만 변경하면 됩니다.
이런 스크립트는 다음과 같이 보일 것입니다:
#!/bin/bash
username=Ramces
echo$username
위의 예는 중복으로 보일 수 있지만, 코드의 복잡성이 증가함에 따라 변수는 필수적이 됩니다. 스크립트는 수백 또는 수천 줄에 이를 수 있으며, 사용자 이름이 여러 위치에 포함될 수 있습니다. 이를 더 잘 이해하기 위해 다음과 같은 약간 다른 스크립트를 고려해 보세요:
#!/bin/bash
username=Linus
echo Hello $username. This is a simple script I wrote that will repeat your name - that is, $username - often as an actual example of how to use Bash variables. I hope it will make it easier to understand how to use variables to improve your Bash workflow, $username. In this case, the variable username is mapped to your name. Whenever Bash runs into it, it replaces it with $username.
위의 스크립트는 username 변수로 정의된 이름을 사용하여 텍스트를 완성합니다. 실제 사용자의 이름을 사용할 경우, 이를 네 번 입력해야 하고, 다음 사용자에 대해서도 동일하게 네 번 입력해야 합니다. 계속해서 반복해야 합니다. 변수를 할당함으로써 각 사용자에 대해 한 번만 변경하면 되고, 텍스트 내에서 사용자 이름이 언급되는 모든 부분이 업데이트됩니다.
알아두면 좋은 점: 변수 외에도 Bash에서 for 루프를 사용할 수 있습니다.
영구 Bash 변수 및 별칭
일시적으로 변수를 설정하는 방법과 더 영구적으로 설정하는 방법을 살펴보았습니다. Bash에서 변수를 영구적으로 설정하려면 “~/.bashrc” 파일을 편집하면 됩니다.
- 좋아하는 텍스트 편집기로 “~/.bashrc” 파일을 엽니다.
nano ~/.bashrc- 프로세스가 잘 작동하지 않을 경우를 대비해 단일 변수만 추가하여 테스트 실행으로 시작하는 것이 좋습니다. 파일의 끝으로 이동하여 새 줄에 변수를 추가합니다.
myname="Ramces Red"
- 파일을 저장하고 편집기를 종료합니다. 수정 사항은 즉시 적용되지 않습니다. 터미널에서 다음을 입력하여 적용합니다:
source ~/.bashrc- Bash 세션에서 새로 설정한 변수를 사용합니다:
echo$myname원하는 만큼 많은 변수를 설정할 수 있으며, Bash에서의 일상적인 작업을 크게 간소화할 수 있습니다.
생산성을 높이기 위해 다른 유형의 변수인 별칭을 설정하는 것도 좋습니다. 일반 변수는 명령에서 사용할 수 있는 데이터에 매핑되는 반면, 별칭은 실제 명령 대신 사용됩니다.
기억하기 쉬운 변수를 사용하여 긴 문자열을 보유할 수 있는 것처럼, 별칭을 사용하여 복잡한 명령의 간단한 대안으로 사용할 수 있습니다. 여기에서 전체 7zip 압축 명령을 두 글자의 별칭으로 변환하는 방법에 대해 더 알아볼 수 있습니다.
마지막으로, .bashrc에 영구적으로 변수를 설정했더라도, 이전에 본 것처럼 임시로 다른 값을 재할당할 수 있습니다. 변수는 현재 Bash 세션이 끝날 때까지(로그아웃하거나 재시작 후) 또는 .bashrc 파일을 다시 소스할 때까지 새 내용을 표시합니다.
배열 만들기
대부분의 Bash 사용자는 변수를 데이터 조각과 레이블 간의 간단한 링크로 생각하지만, 배열의 마커로 사용할 수도 있습니다. 배열은 여러 값을 번호가 매겨진 인덱스 형식으로 저장할 수 있는 데이터 구조의 일종입니다. 배열을 만들려면 아래 단계를 따르세요:
- 빈 셸 스크립트를 만듭니다:
nano array.sh- 현재 셸 프로세스에서 Bash 배열을 초기화하기 위해
declare하위 명령을 사용합니다.
declare-a myarray
- 내장 Bash 할당 연산자를 사용하여 새 배열을 채웁니다. 예를 들어, 다음 코드 줄은 다섯 개의 요소가 포함된 배열을 생성합니다:
myarray=([0]=hello [1]=maketecheasier [2]=its [3]=an [4]=array)
echo명령을 사용하여 새 배열이 작동하는지 테스트합니다:
echo${myarray[1]}
“*” 연산자를 사용하여 배열의 내용을 스트리밍할 수도 있습니다:
echo${myarray[*]}
서브셸 변수 실행
Bash의 가장 큰 기능 중 하나는 서브셸을 생성하는 능력입니다. 여기서 프로그램은 기본 함수처럼 실행될 수 있습니다. 예를 들어, 셸 스크립트에서 ls -a를 작성하고 실행하면 현재 작업 디렉토리의 내용을 여전히 출력합니다.

이것이 제한적으로 보일 수 있지만, Bash는 이러한 프로그램의 출력을 변수에 저장할 수 있도록 하여 이를 스크립트 내 다른 프로그램의 입력으로 사용할 수 있게 합니다.
- 서브셸 변수를 사용하려면 먼저 빈 셸 스크립트를 만듭니다:
nano subshell.sh- 새 셸 스크립트 내에 다음 보일러플레이트 코드를 작성합니다:
#!/bin/bash
mysubshell=$(x)
echo"The output of the variable is $mysubshell"- “x”를 실행하고 출력을 저장하려는 명령으로 바꿉니다. 예를 들어, 다음은 world.txt 파일의 내용을 가져오고 “world”라는 단어를 “maketecheasier”로 바꿉니다.
mysubshell=$(sed s/world/maketecheasier/g world.txt)
- 새 스크립트를 실행하여 새 서브셸 변수를 테스트합니다:
chmod u+x ./subshell.sh
bash ./subshell.sh
참고: 변수 외에도 Bash에서 알아야 할 특수 문자가 있습니다.
부분 문자열 조작
데이터를 저장하고 검색하는 것 외에도 변수의 내용을 수정할 수 있습니다. Bash에는 각 변수 끝에 붙일 수 있는 연산자 세트가 있어 추가 프로그램을 호출하지 않고도 스크립트를 세밀하게 조정할 수 있습니다.
- 빈 셸 스크립트를 만듭니다:
nano substring.sh- 빈 스크립트 내에 다음 보일러플레이트 코드를 작성합니다:
#!/bin/bash
mysubstring=hello.txt.old
echo"My filename is: ${mysubstring}"- 기본 부분 문자열 조작은 세 가지 형태로 제공됩니다. 첫 번째로, “#” 문자는 셸이 변수의 시작 부분에서 제거할 정규 표현식 패턴을 수용합니다:
#!/bin/bash
mysubstring=hello.txt.old
echo"My filename is: ${mysubstring#*.}"
- 두 번째로, “%” 문자는 변수의 끝에서 제거할 정규 표현식 패턴을 수용합니다:
#!/bin/bash
mysubstring=hello.txt.old
echo"My filename is: ${mysubstring%.*}"
- Bash는 또한 변수의 내용을 선택적으로 수정하는 방법을 제공합니다.
sed프로그램과 유사하게, “/” 문자를 사용하여 변수 내의 문자열을 찾아 바꿀 수 있습니다:
#!/bin/bash
mysubstring=hello.txt
echo"My filename is: ${mysubstring/hello/maketecheasier}"
알아두면 좋은 점: 정규 표현식은 모든 Linux 사용자의 도구 상자에서 중요한 도구입니다. 이를 효과적으로 사용하는 방법을 배우려면 우리의 쉽게 배울 수 있는 치트 시트를 통해 알아보세요.
자주 묻는 질문
변수를 사용하여 셸 스크립트를 실행할 수 있나요?
예, 실행하려는 스크립트의 전체 경로를 작성하면 가능합니다. 예를 들어, $(/home/ramces/.scripts/sample.sh)를 실행하면 Bash 서브셸이 생성되고 내 홈 디렉토리에서 “sample.sh” 스크립트가 실행됩니다.
스크립트가 실행되는 동안 변수를 제거할 수 있나요?
예. 스크립트 내에서 unset 하위 명령을 삽입한 후 변수 이름을 입력하여 실행 중인 셸 프로세스에서 변수를 제거할 수 있습니다. 이 명령을 실행하면 현재 셸 프로세스 외부에서 실행되는 변수는 제거되지 않는다는 점에 유의해야 합니다.
외부 셸 스크립트 내에서 영구 변수를 사용할 수 있나요?
예. 현재 셸 프로세스 외부에서 선언된 변수의 값을 참조하는 것이 가능합니다. 그러나 외부 변수를 사용할 때는 쉽게 임시로 덮어쓸 수 있으므로 주의해야 합니다.
이미지 출처: Unsplash. 모든 수정 및 스크린샷은 Ramces Red에 의해 작성되었습니다.