셸 스크립트에서 콜론(:)은 단순히 문장 부호처럼 보이지만, 실제로는 아무 동작도 하지 않는 '널 명령(null command)'입니다. 이 특성을 활용하면 매개변수 확장(parameter expansion)과 결합하여 스크립트 작성 시 매우 유용하고 간결한 코드를 만들 수 있습니다. 필수 인수 검사, 변수 기본값 설정, 파일 비우기 및 접근성 검사 등 다양한 프로그래밍 패턴을 효율적으로 처리할 수 있어 스크립트의 안정성과 가독성을 크게 향상시킵니다.
콜론은 인수를 평가하지만 그 결과를 버리는 내장 명령으로, 1971년 톰슨 셸(Thompson shell)부터 존재했습니다. 예를 들어, 스크립트에 필수 인수가 누락되었을 때 `: "${1:?missing argument, aborting!}"` 한 줄로 진단 메시지를 출력하고 스크립트를 종료시킬 수 있습니다. 여기서 `"${1:?diagnostic}"` 구문은 `$1` 변수가 설정되지 않았거나 비어 있을 경우 `diagnostic` 메시지를 표준 에러(stderr)로 출력하고 0이 아닌 상태로 셸을 종료시킵니다. 또한, 변수에 기본값을 설정할 때 `: ${VAR:=default}`와 같이 사용하면, `VAR`가 비어 있을 경우 `default` 값을 할당하면서도 확장된 결과가 명령으로 실행되는 것을 방지합니다. 이는 `VAR="${VAR:-default}"`처럼 변수명을 두 번 적는 방식보다 오타 가능성을 줄여줍니다.
이 외에도 콜론은 다양한 상황에서 활용됩니다. 리디렉션과 함께 `: > error.log`처럼 사용하면 파일 내용을 비울 수 있고, `( : < dataset.json ) && echo YES`와 같이 파일의 읽기 가능 여부를 검사할 수도 있습니다. `trap : INT`처럼 특정 시그널(signal)에 대한 빈 명령을 지정하거나, `if some-command; then : else echo "command failed" fi`처럼 조건문의 빈 분기를 처리하는 데도 유용합니다. `set -u` 환경에서 여러 변수가 설정되었는지 한 번에 검사하거나, `while :; do ... done`과 같이 항상 성공하는 조건을 이용해 무한 루프를 간결하게 표현하는 것도 가능합니다. 이러한 콜론의 활용법은 셸 스크립트를 더욱 견고하고 효율적으로 만드는 데 기여하며, 스크립트 개발자들이 알아두면 좋은 핵심 기법입니다.