변수

변수 에서 Bash

{other: "%{count}개의 연습 문제"}

변수 소개

변수

_변수_는 데이터를 담아 두는 곳이에요. Bash에는 문자열과 배열, 두 가지 종류의 데이터가 있어요. 배열은 나중에 다뤄요.

변수는 이렇게 할당해요.

name="value"
Note

중요: 등호 앞뒤에는 공백이 없어야 해요!

아래 예시처럼 공백이 있으면,

x = 10

bash는 명령어 x를 두 개의 인자 =와 10과 함께 호출해요!

변수는 _매개변수_라고 부르기도 해요. 이 문서에서는 두 용어를 같은 뜻으로 사용해요.

bash가 사용하거나 설정하는 중요한 매개변수로는 이런 것들이 있어요:

  • PATH: 외부 명령어를 찾을 때 사용하는, 콜론으로 구분된 디렉터리 목록이에요.
  • IFS: "내부 필드 구분자"예요. 아래에서 어떻게 쓰이는지 살펴봐요.
  • PWD: 현재 작업 디렉터리예요. pwd 명령어의 출력과 같은 값이에요.
  • RANDOM: 0과 32767 사이의 의사 난수 정수예요.
  • BASH_VERSION: 실행 중인 bash 인스턴스의 버전 문자열이에요.

변수 이름

변수 이름은 _대문자, 소문자, 숫자, 밑줄_로 구성돼요. 숫자로 시작할 수는 없어요.

Caution

변수 이름을 전부 대문자로 쓰는 것은 피하는 게 좋아요. 셸은 자체 매개변수에 이 관례를 사용하는데, 특별한 의미를 지닌 셸 매개변수를 실수로 덮어쓰고 싶지는 않겠죠. 예를 들어: 1, 2, 3

매개변수 확장

매개변수의 값은 $varname 문법으로 가져와요.

x=10
echo "The value of x is $x"

변수 이름이 주변 텍스트와 헷갈리지 않도록, 변수 이름을 중괄호로 감쌀 수 있어요. 예를 들어 문자열 10x10을 출력하려면

echo "${x}x$x"
# or
echo "${x}x${x}"

일부 스타일 가이드에서는 가독성이나 일관성을 위해 대부분의 경우 중괄호를 사용할 것을 권장해요.

위치 매개변수

명령어와 인자 강의에서 이야기했듯이, 명령어는 인자를 받을 수 있어요. Bash 스크립트도 예외가 아니에요. 현재 bash 인스턴스에 전달된 인자를 _위치 매개변수_라고 해요. 이들은 다음과 같은 특수 매개변수로 가져올 수 있어요:

  • $1: 첫 번째 위치 매개변수예요.
  • $2 ... $9: 그다음 매개변수들이에요.
  • ${10} ...: 두 자리 수부터는 중괄호가 필요해요.
  • $0: 현재 스크립트의 이름이에요.

셸 함수에 전달하는 인자도 마찬가지로 위치 매개변수이고, 똑같은 방식으로 다뤄요. 함수에 대해서는 나중 강의에서 더 살펴봐요.

특수 위치 매개변수

위치 매개변수를 다루는 데 도움이 되는 _특수 매개변수_도 있어요.

  • $#는 위치 매개변수의 _개수_로 확장돼요.
  • "$@"는 모든 위치 매개변수의 목록으로 확장되는데, 각각이 별도의 단어로 취급돼요.
  • "$*"는 모든 위치 매개변수를 하나의 문자로 이어 붙인 하나의 문자열로 확장돼요.
    • 이어 붙이는 문자는 $IFS 변수의 _첫 번째 문자_이고, 기본값은 공백이에요.

"$@"는 위치 매개변수를 안전하게 인용한 채 다른 명령어에 전달하는 가장 안전한 방법이에요. 위치 매개변수를 순회할 때도 이걸 사용해요:

for arg in "$@"; do
    do_something_with "$arg"
done

실제로는 "$*"보다 "$@"를 더 자주 사용해요.

명령어 치환

bash 스크립트에서 아주 자주 하는 작업이 명령어의 출력을 붙잡아 변수에 저장하는 것이에요. 이럴 때 _명령어 치환_을 사용해요.

var=$(command)

예를 들어 문자열을 대문자로 바꾸려면 이렇게 해요:

text="Hello world!"
uppercase=$(echo "$text" | tr '[:lower:]' '[:upper:]')
echo "$uppercase"
# => HELLO WORLD!

매개변수 확장 더 알아보기

Bash에는 변수와 문자열을 다루는 내장 기능이 많아서, 외부 명령어를 불러올 필요가 없어요.

  • 텍스트를 대문자로 바꾸기. 앞 절에서 tr로 텍스트를 대문자로 바꾸는 방법을 보여줬어요. bash에서 하려면 이렇게 해요:

    echo "${text^^}"
    

    마찬가지로 ${text,,}는 값을 소문자로 바꿔요.

  • 변수가 비어 있을 때 기본값 제공하기.

    default="nothing here"
    result=""
    echo "${result:-$default}"
    # => nothing here
    
  • 검색과 바꾸기.

    text="Hello world!"
    echo "${text//[aeiou]/X}"
    # => HXllX wXrld!"
    

그 밖에도 흥미로운 매개변수 확장이 많아요: 부분 문자열 추출하기, 문자열 길이 구하기, 기본값 _할당_하기, 값의 앞이나 뒤에서 텍스트 제거하기 등등이요. 매뉴얼에서 자세히 읽어볼 수 있어요.

GitHub에서 편집 링크가 새 창이나 탭에서 열려요