개요
최근 쉘 스크립트를 만들고 있는데, 배열의 요소를 구분 기호로 결합한 문자열을 만드는 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를 맨 앞에 붙이고, 뒤에 연결된 문자열을 이어 붙이는 방법이다. 맨 첫 번째 요소에는 구분자를 붙이지 않기 위한 방법이다.
참고 문서
728x90