Linux/Shell Script

[Shell] JOIN 함수 구현 - 배열 요소를 구분 기호로 결합

비번변경 2025. 5. 12. 23:50

개요

최근 쉘 스크립트를 만들고 있는데, 배열의 요소를 구분 기호로 결합한 문자열을 만드는 join 함수가 필요해졌다.

이 글에서는 구글링 해서 찾은 join 함수를 기록해 둔다.

 

 

스크립트

join_ws() { local d=$1 s=$2; shift 2 && printf %s "$s${@/#/$d}"; }

 

사용법

arr=("apple" "banana" "cherry")
echo -e $(join_ws ',' "${arr[@]}")
echo -e $(join_ws ' || ' "${arr[@]}")
echo -e $(join_ws '\n' "${arr[@]}")

실행시켜 보면 스크립트 대로 쉼표, 문자열, 줄 바꿈을 기준으로 잘 연결된 문자열을 확인할 수 있다.

 

 

동작 방식

동작 방식을 분석하면 다음과 같다.

 

1. 인자 복사

첫 번째 인자(구분자)를 d에, 두 번째 인자(배열 요소 등)를 s에 저장한다.

local d=$1 s=$2

 

2. 일부 인자 제거

첫 번째, 두 번째 인자를 제거하여 구분자와 연결할 배열 요소를 확보한다.

shift 2

 

3. 패턴 치환

배열의 각 요소 앞에 $d를 붙인다.

${@/#/$d}

 

달리 말해, "$s${@/#/$d}"은 시작 문자열 s를 맨 앞에 붙이고, 뒤에 연결된 문자열을 이어 붙이는 방법이다. 맨 첫 번째 요소에는 구분자를 붙이지 않기 위한 방법이다.

 

 

 

참고 문서

https://stackoverflow.com/questions/1527049/how-can-i-join-elements-of-a-bash-array-into-a-delimited-string

 

 

728x90