Linux/Shell Script

[Shell] 매개변수 배열 슬라이싱

비번변경 2025. 5. 9. 12:14

개요

쉘 스크립트를 하나 개발하고 있다. 실행 시 매개변수를 몇 가지 전달해야 하는데, 전달한 매개변수 배열의 슬라이싱이 필요하다.

방법을 적어둔다.

 

 

$@

$@은 모든 매개변수를 접근하되, 별개의 구분된 문자열로 취급한다. 즉, 배열로 취급한다. 

(흔히 $@와 혼용되는 $*는 모든 매개변수를 공백으로 구분된 하나의 문자열로 취급한다.)

때문에 배열 슬라이싱을 하기 위해서는 $@을 사용해야 한다.

 

 

슬라이싱

쉘 스크립트에서 배열 슬라이싱 방법은 다음과 같다.

${변수:인덱스:길이}

인덱스와 길이는 음수를 허용하며, 음수를 사용하면 뒤에서부터의 인덱스에 해당한다. 아래는 케이스별 예시이다.

$ string=01234567890abcdefgh
$ echo ${string:7}
7890abcdefgh
$ echo ${string:7:0}

$ echo ${string:7:2}
78
$ echo ${string:7:-2}
7890abcdef
$ echo ${string: -7}
bcdefgh
$ echo ${string: -7:0}

$ echo ${string: -7:2}
bc
$ echo ${string: -7:-2}
bcdef

 

 

$@ 슬라이싱

$@ 배열을 자체적으로 슬라이싱 하긴 좀 어려운 것 같고, 다른 변수에 복사한 뒤 슬라이싱해야 한다. 방법은 아래와 같다.

#!/bin/bash

# 배열 복사
var_all_arr=("$@")

# 슬라이싱 - 인덱스 2부터
echo ${var_all_arr[@]:2}

이제 위의 코드를 실행시켜보면,

원하던 대로 잘 슬라이싱 된 모습을 확인할 수 있다.

 

 

참고 문서

[Bash] Shell Script argument 다루기

https://www.gnu.org/software/bash/manual/bash.html#Shell-Parameter-Expansion

 

728x90