이 글에서는 Bash 및 셸 스크립트에서 $@가 무엇을 의미하는지, 그리고 이를 어떻게, 왜 사용하는지 자세히 설명합니다.
$@는 Bash의 특수 변수(special variable)로, 스크립트에 전달된 모든 명령줄 인수(매개변수)의 값을 담고 있습니다.
Bash에서의 명령줄 인수(Command Line Arguments)
셸 스크립트에서 명령줄 인수를 다루는 것은 매우 중요하고 유용한 기능입니다. 명령줄 인수를 활용하면 스크립트 실행 시 외부에서 값을 전달해 동작을 유연하게 제어할 수 있습니다.
이 글은 셸/Bash 스크립트의 명령줄 인수를 다룬 내용을 이어받아 작성되었습니다.
$@에는 스크립트에 전달된 모든 매개변수가 담깁니다
$@가 어떻게 동작하는지 가장 쉽게 확인하는 방법은 역시 예제 코드를 직접 실행해 보는 것입니다.
다음 예제 스크립트는 단순히 $@ 변수의 내용을 화면에 출력합니다.
#!/bin/bash echo $@
이 스크립트를 몇 가지 예시 인수와 함께 호출해 보겠습니다.
sh test.sh "apple" 0 banana 1
실행 결과는 다음과 같습니다.
apple 0 banana 1
이처럼 $@ 변수는 스크립트에 전달된 모든 매개변수의 값을 그대로 담고 있음을 확인할 수 있습니다.
여기서 주목할 점은 따옴표(" ")가 제거되었다는 것입니다. $@에는 전달된 텍스트 자체가 아니라 각 매개변수의 값(value)이 포함되기 때문입니다.
또한 위치 매개변수(positional parameter)는 1번 위치부터 모두 포함됩니다. 0번 위치에는 실행 중인 스크립트의 이름이 들어가므로 $@에서는 제외됩니다.
$@는 활용 사례가 제한적인 특수 변수입니다. 가급적 위치 매개변수를 본래의 용도대로 사용하고(하나의 값을 하나의 매개변수에 전달), $@로 대량의 데이터를 한꺼번에 스크립트로 읽어 들인 뒤 직접 파싱하는 방식은 피하는 것이 좋습니다.