개요
쉘 스크립트를 하나 개발하고 있다. 실행 시 매개변수를 몇 가지 전달해야 하는데, 전달한 매개변수 배열의 슬라이싱이 필요하다.
방법을 적어둔다.
$@
$@은 모든 매개변수를 접근하되, 별개의 구분된 문자열로 취급한다. 즉, 배열로 취급한다.
(흔히 $@와 혼용되는 $*는 모든 매개변수를 공백으로 구분된 하나의 문자열로 취급한다.)
때문에 배열 슬라이싱을 하기 위해서는 $@을 사용해야 한다.
슬라이싱
쉘 스크립트에서 배열 슬라이싱 방법은 다음과 같다.
${변수:인덱스:길이}
인덱스와 길이는 음수를 허용하며, 음수를 사용하면 뒤에서부터의 인덱스에 해당한다. 아래는 케이스별 예시이다.
$ 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