문자열 대체를 사용하여 배열을 결합하시겠습니까?

문자열 대체를 사용하여 배열을 결합하시겠습니까?

문자열 대체를 사용하여 배열을 결합하려고 합니다. 산출:

a,b,c

아래는 작동하지만 배관 없이도 할 수 있는 방법이 없나요?

#!/bin/bash

words=(a b c)

echo "${words[@]}" | sed 's/ /,/g'

나는 이것을 시도했지만 작동하지 않습니다.

echo "${words[@]// /,/}"

답변1

특정 문자로 구분된 배열 요소로 구성된 문자열을 출력하려면 다음을 사용하십시오.

words=(a b c)

( IFS=,; printf '%s\n' "${words[*]}" )

in *대신 사용하면 배열의 모든 요소를 ​​연결하여 단일 문자열을 생성합니다 . 요소는 의 첫 번째 문자로 구분되므로 확장을 수행하기 전에 이를 쉼표로 설정합니다.@"${words[*]}"words$IFS

IFS호출을 위해 쉼표로 구분된 문자열을 생성하는 데 필요한 단일 확장 이외의 다른 작업에 대해 실수로 설정하는 것을 방지하기 위해 서브셸을 설정했습니다 printf.

로컬 로 설정하기 위해 서브셸을 사용하는 대신 IFS, 설정한 다음 재설정할 수 있습니다.

words=(a b c)

IFS=,$IFS
printf '%s\n' "${words[*]}"
IFS=${IFS#?}

먼저 쉼표를 의 첫 번째 문자로 추가하고 $IFS변수의 이전 값을 쉼표 뒤의 문자로 유지합니다.

매개변수 대체는 ${IFS#?}첫 번째 문자(우리가 추가한 쉼표)를 삭제합니다.

관련 정보