소개
스크립트를 작성할 때 변수에 저장된 텍스트를 수정해야 하는 경우가 많습니다. 파일 경로의 특정 부분을 추출하거나, 설정값에 포함된 단어를 바꾸거나, 사용자가 값을 입력하지 않아도 변수가 유효한 값을 갖도록 해야 할 수 있습니다.
Bash 는 이러한 작업을 위한 강력한 내장 기능인 **매개변수 확장 (parameter expansion)**을 제공합니다.
매개변수 확장은 추가 명령을 실행하지 않고도 텍스트를 변환할 수 있으므로 중요한 셸 개념입니다. 셸 스크립팅에서는 작은 변경마다 외부 유틸리티를 호출하는 것보다 내장 기능을 사용하는 편이 더 빠르고 간단한 경우가 많습니다.
이 실습에서는 다음 세 가지 핵심 문자열 조작 기법을 배웁니다.
- 슬라이싱 (Slicing): 문자열의 특정 부분을 추출합니다 (예: 처음 5 개 문자).
- 치환 (Replacement): 문자열에서 텍스트를 찾아 바꿉니다.
- 기본값 (Default Values): 변수가 없거나 비어 있을 때 대체 값을 자동으로 할당합니다.
문자열 변수 정의
먼저 긴 파일 경로가 들어 있는 변수를 만듭니다. 이 문자열을 사용해 조작 기법을 연습합니다.
셸 작업에서는 많은 시스템 정보가 텍스트로 표현되므로 문자열 처리가 어디에서나 사용됩니다. 경로, 사용자 이름, 호스트 이름, 설정값, 명령 출력 등이 그 예입니다. 셸을 벗어나지 않고 텍스트를 원하는 형태로 바꾸는 방법을 익히면 작업 효율을 크게 높일 수 있습니다.
string_lab.sh라는 새 스크립트를 만듭니다.
string_lab.sh를 열고 다음 코드를 추가합니다.
nano string_lab.sh
#!/bin/bash
## Define a variable with a file path
FILE_PATH="/usr/local/share/applications/config.xml"
echo "Original Path: $FILE_PATH"
저장 (Ctrl+O, Enter) 한 다음 종료 (Ctrl+X) 합니다.
스크립트를 실행할 수 있도록 권한을 부여하고 실행해 환경을 준비합니다.
chmod +x string_lab.sh
./string_lab.sh
전체 경로가 출력되면 성공입니다. 이제 이 문자열을 조작해 보겠습니다.
부분 문자열 추출 (슬라이싱)
문자열의 처음 몇 글자처럼 특정 부분만 필요한 경우가 있습니다. 이를 **슬라이싱 (Slicing)**이라고 합니다.
슬라이싱의 문법은 다음과 같습니다. ${Variable:Offset:Length}
- Offset: 시작 위치입니다 (0 은 첫 번째 문자입니다).
- Length: 가져올 문자 수입니다.
이 작업은 매개변수 확장으로 수행됩니다. 즉, Bash 가 명령을 실행하기 전에 변수 값을 내부적으로 변환합니다. 간단한 부분 문자열 추출에는 cut과 같은 추가 유틸리티가 필요하지 않습니다.
FILE_PATH에서 처음 5 개 문자 (/usr/) 를 추출합니다.
string_lab.sh를 엽니다.
nano string_lab.sh
파일 맨 아래에 다음 코드를 추가합니다.
## Slicing: Start at index 0, take 5 characters
## Syntax: ${Variable : Start : Length}
SLICE=${FILE_PATH:0:5}
echo "First 5 characters: $SLICE"
저장하고 종료한 다음 실행합니다.
./string_lab.sh
결과:
First 5 characters: /usr/
Bash 가 문자열의 시작 위치에서 정확히 5 개 문자를 추출했습니다.
부분 문자열 치환
이 기법은 텍스트 편집기의 "찾기 및 바꾸기"와 비슷하게 동작합니다.
문법은 다음과 같습니다. ${Variable/Find/Replace}
파일 경로에서 share 디렉터리를 bin으로 바꾼다고 가정해 보겠습니다.
string_lab.sh를 엽니다.
nano string_lab.sh
다음 코드를 추가합니다.
## Replacement: Find 'share', replace with 'bin'
## Syntax: ${Variable / Pattern / Replacement}
NEW_PATH=${FILE_PATH/share/bin}
echo "Modified Path: $NEW_PATH"
저장하고 종료한 다음 실행합니다.
./string_lab.sh
결과:
Modified Path: /usr/local/bin/applications/config.xml
셸이 share의 첫 번째 occurrence 를 찾아 bin으로 바꿨습니다.
이 기법은 경로 조작, 파일 이름 정리, 간단한 설정 변경에 유용합니다. Bash 내부에서 작업이 수행되므로 작은 문자열을 치환할 때 별도의 텍스트 처리 명령을 실행하는 것보다 일반적으로 가볍고 읽기 쉽습니다.
기본값 제공
스크립트는 입력값이나 USER, HOME과 같은 환경 변수에 의존하는 경우가 많습니다. 이러한 변수가 없으면 스크립트가 중단되거나 예측하지 못한 방식으로 동작할 수 있습니다.
변수가 설정되지 않았거나 비어 있을 때 사용할 **기본값 (Default Value)**을 지정할 수 있습니다.
문법은 다음과 같습니다. ${Variable:-DefaultValue}
string_lab.sh를 엽니다.
nano string_lab.sh
다음 코드를 추가합니다. 스크립트에서 USER_NAME을 정의하지 않았으므로 현재 이 변수는 설정되지 않은 상태입니다.
## Default Value: If USER_NAME is missing, use 'guest'
## Syntax: ${Variable :- Default}
CURRENT_USER=${USER_NAME:-guest}
echo "Current User: $CURRENT_USER"
저장하고 종료한 다음 실행합니다.
./string_lab.sh
결과:
Current User: guest
USER_NAME을 정의하지 않았기 때문에 Bash 는 누락된 데이터 대신 대체 값 guest를 사용했습니다. 따라서 스크립트가 문제없이 계속 실행됩니다.
이 패턴은 입력이 환경 변수나 선택적 인수에서 전달될 수 있는 자동화 작업에 특히 유용합니다. 일부 데이터가 누락되어도 적절한 기본값을 사용하면 스크립트를 더 안전하고 예측 가능하게 만들 수 있습니다.
요약
이 실습에서는 Bash 내부에서 매개변수 확장을 사용해 문자열을 직접 조작하는 방법을 배웠습니다.
- 슬라이싱 (
\${var:offset:length}): 정확한 부분 문자열을 추출합니다. - 치환 (
\${var/old/new}): 변수의 내용을 수정합니다. - 기본값 (
\${var:-default}): 설정되지 않은 변수를 적절하게 처리합니다.
이러한 기법을 사용하면 간단한 작업마다 sed나 awk 같은 외부 도구를 사용하지 않고도 텍스트를 효율적으로 처리하는 견고한 스크립트를 작성할 수 있습니다.



