1. 확장
확장 : 셸이 명령을 해석하고 실행하기 전에 명령에 포함된 문자열, 수, 와일드카드 패턴 등을 변환하는 과정
1. 중괄호 확장
중괄호 확장 : 중괄호를 사용해 문자열 시퀀스나 조합을 생성하는 것
✅ 중괄호 안에 쉼표로 구분한 문자열 입력 → 왼쪽에서 오른쪽으로 순서대로 문자열을 한번씩 사용하여 새로운 문자열 만듦 ( 쉼표 뒤 공백 X)
echo hello-{cat, dog, world}
#hello-cat hello-dog hello-word
✅ 공백을 포함해 중괄호 확장 → 공백 앞 \\
echo hello-{cat, happy\\ dog, world}
#hello-cat hello-happy dog hello-world
✅ 싱글 쿼트나 더블 쿼트 사용하면 안됨 → 쿼팅된 중괄호는 확장되지 않고 문자 그대로 해석
echo "hello-{cat, dog, world}"
#hello-{cat, dog, world}
☑️ 중괄호 확장 중첩은 가능
echo hello-{cat, {happy,wild}-dog, world}
#hello-cat hello-happy-dog hello-wild-dog hello-world
☑️ {시작..끝} 또는 {시작..끝..증분} 형식도 지원
2. 틸데 확장
틸데 확장 : ~ 가 홈 디렉터리로 변환되는 것
✅ ~ 뒤에 아무것도 없으면 사용자의 홈 디렉터리로 확장
✅ ~ 를 쿼팅하면 문자 그대로 해석
✅ ~ + 사용자 이름 → 해당 사용자의 홈 디렉터리로 확장
✅ ~+ : 현재 작업 디렉토리로 확장
✅ ~- : 이전 디렉터리로 확장
3. 명령어 치환
명령어 치환 : $() 로 둘러싸인 명령어를 실행하고 그 결과를 현재 셸의 명령어나 스크립트에서 사용할 수 있게 함
remember_datetime = $(date + "%Y-%m-%d %H:%M:%S")
echo $remember_datetime
#2025-03-12 10:09:27
4. 산술 확장
산술 확장 : $(()) 나 이중괄호로 감싼 표현식을 산술로 연산해 그 결과를 스크립트에서 사용
result = $((3+2))
echo $result
#5
((result = result - 4 ))
#1
🚀 정수형 변수의 산술 연산
일반 변수는 지정된 값을 문자열로 해석하기 때문에 산술 연산이 적용되지 않음
→ 산술 확장이나 let 명령어를 사용
✅ declare -i 로 선언한 변수는 정수형 변수 취금 → 정수가 아닌 값은 무조건 0이 저장
✅ 정수형 변수로 산술 연산한 결과를 정수형 변수가 아닌 일반 변수에 저장하면 산술 연산이 적용되지 않음
✅ 일반 변수 ⇒ 정수 값이 저장 & 연산 결과 ⇒ 정수형 변수에 저장 : 산술 연산이 적용
🚀 산술 연산자
✅ ** : 지수 연산자 ** 앞은 밑 ** 뒤는 지수
✅ % : 나눗셈을 한 나머지를 반환하는 나머지 연산자
🚀 비교 연산자
✅ > : 왼쪽의 값이 크다
✅ >= : 왼쪽의 값이 크거나 같다
✅ < : 왼쪽 값이 작다
✅ <= : 왼쪽의 값이 작거나 같다
✅ == : 두 값이 같다
✅ != : 두 값이 같지 않다
🚀 논리 연산자
✅ && : 논리 곱 연산자, 두 조건이 모두 침인 경우에만 결과가 참
✅ || : 논리합 연산자, 두 조건 중 하나만 참이면 결과가 참
✅ ! : 논리 부정 연산자, 결과를 반대로 뒤집음
🚀 비트 연산자
✅ | : 두 값 중 하나라도 1이면 1
✅ & : 두 값 모두 1이어야 1
✅ ^ : 두 값이 같으면 0, 다르면 1
✅ ~ : 0은 1로 1은 0으로 바뀜
✅ <<n : 왼쪽으로 n 비트 움직이고 새로운 값의 하위 부분은 1으로 채워줌
✅ >>n : 오른쪽으로 n 비트 움직이고 값의 하위 n 비트는 제거
🚀 할당 연산자
변수에 값을 저장하는 연산자
5. 서브스트링 확장
서브스트링 확장 : 변수에 저장된 문자열의 특정 부분을 추출하는 기능
${변수:오프셋}
${변수:오프셋:길이}
✅ 변수에 저장된 문자열의 오프셋부터 길이만큼의 문자열을 추출
✅ 오프셋 : 추출할 문자열의 시작 위치, 음수라면 뒤에서 부터 추출
✅ 길이 : 추출할 문자열의 길이, 생략된 형태라면 문자열 끝까지 추출
#인덱스 배열도 문자열과 비슷하 형식으로 사용가능
${변수[@] : 오프셋}
${변수[@] : 오프셋 : 길이}
6. 패턴 찾아 바꾸기
변수에 저장된 문자열에서 패턴과 일치하는 문자나 문자열을 찾으면 다른 값으로 바꾸는 기능
1️⃣ 패턴과 첫번쨰로 일치하는 문자나 문자열을 찾으면 지정한 문자열로 변경
${변수/패턴/문자열}
2️⃣ 패턴과 일치하는 모든 문자나 문자열을 지정한 문자열로 변경
${변수//패턴/문자열}
3️⃣ 일치하는 부분이 문자열의 시작일 때만 변경
${변수/#패턴/문자열}
4️⃣ 일치하는 부분이 문자열의 끝일 때만 변경
${변수/%패턴/문자열}
7. 대소문자 바꾸기
변수에 저장된 첫 번째 문자 또는 문자열 전체에서 패턴과 일치하는 문자가 있으면 대문자 또는 소문자로 바꾸는 기능
✅ 패턴에는 한 글자만
✅ 패턴을 입력하지 않으면 모든 문자가 매치되는 것으로 간주 → 문자열 전체가 변경
1️⃣ 패턴과 일치하는 문자를 모두 대문자
${변수^^패턴}
2️⃣ 첫 번째 문자가 패턴과 일치하면 첫 번째 문자를 대문자로
${변수^패턴}
3️⃣ 패턴과 일치하는 문자를 모두 소문자로
${변수,,패턴}
4️⃣ 첫 번째 문자가 패턴과 일치하면 첫 번째 문자를 소문자로
${변수,패턴}
8. 변수 값에 따른 확장
🚀 빈 값일 때 지정한 값 사용하기
변수에 값이 설정되지 않았거나 빈 값일 때 지정한 문자열 사용
${변수:-문자열}
🚀 빈 값일 때 지정한 값 사용하고 저장하기
변수에 값이 지정되지 않았을 때 지정된 문자열을 사용하고 변수에 저장
${변수:=문자열}
🚀 빈 값일 때 에러 발생시키기
변수에 값이 설정되지 않았거나 빈 값일 때 에러 발생
${변수:?문자열}
🚀 빈 값이 아닐 때 지정한 값 사용하기
지정된 값 대신 지정한 값을 사용
변수에 지정된 값은 바뀌지 않음
변수에 지정된 값이 없다면 지정한 값을 사용하지 않음
${변수:+문자열}
9. 간접 확장
간접 확장 : 변수의 이름을 저장하는 다른 변수를 통해 해당 변수의 값을 참조하는 기능 → 변수의 이름이나 값을 동적으로 처리할 수 있어 스크립트의 유연성과 재사용성이 향상
${!변수}
var = "this is real variable"
echo $var
#this is real variable
ref_var = "var"
echo ${ref_var}
#var
echo ${!ref_var}
#this is real variable
10. 일치하는 패턴 제거
지정한 패턴과 일치하는 문자열을 제거한 후 값을 반환
1️⃣ 앞에서부터 패턴을 검색해 가장 짧게 일치하는 문자열 제거
${변수#패턴}
2️⃣ 앞에서부터 패턴을 검색해 가장 길게 일치하는 문자열 제거
${변수##패턴}
3️⃣ 뒤에서부터 패턴을 검색해 가장 짧게 일치하는 문자열 제거
${변수%패턴}
4️⃣ 뒤에서부터 패턴을 검색해 가장 길게 일치하는 문자열 제거
${변수%%패턴}
☑️ 패턴이 반드시 문자열의 앞 또는 뒤에서부터 일치해야 한다는 점 → 모든 문자를 의미하는 * 패턴을 사용하면 좋음
11. 확장 연산자
${변수@연산자}
✅ U : 모든 문자를 대문자로
✅ u : 첫 번째 문자만 대문자
✅ L : 모든 문자를 소문자로
'개발 공부 > Linux' 카테고리의 다른 글
| [Linux] Bash : 리디렉션과 파이프라인 (0) | 2026.03.02 |
|---|---|
| [Linux] Bash: 셸 옵션 (1) | 2026.03.01 |
| [Linux] Bash: 반복문, 함수, 변수, 배열, 쿼팅 (0) | 2026.03.01 |
| [Linux] Bash: 조건문과 테스트 연산자(2) (0) | 2026.03.01 |
| [Linux] Bash: 조건문과 테스트 연산자(1) (0) | 2026.03.01 |
