![문자열 대체를 사용하여 배열을 결합하시겠습니까? [복사]](https://linux55.com/image/178512/%EB%AC%B8%EC%9E%90%EC%97%B4%20%EB%8C%80%EC%B2%B4%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EB%B0%B0%EC%97%B4%EC%9D%84%20%EA%B2%B0%ED%95%A9%ED%95%98%EC%8B%9C%EA%B2%A0%EC%8A%B5%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
문자열 대체를 사용하여 배열을 결합하려고 합니다. 산출:
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 대신 in을 사용하면 *
배열의 모든 요소를 연결하여 문자열을 생성합니다. 요소는 의 첫 번째 문자로 구분되므로 확장을 수행하기 전에 쉼표로 설정합니다.@
"${words[*]}"
words
$IFS
IFS
호출을 위해 쉼표로 구분된 문자열을 생성하는 데 필요한 단일 확장 이외의 다른 항목으로 실수로 설정하는 것을 방지하기 위해 하위 쉘에 설정 했습니다 printf
.
IFS
서브셸을 사용하여 로컬로 설정하는 대신 설정하고 재설정할 수 있습니다.
words=(a b c)
IFS=,$IFS
printf '%s\n' "${words[*]}"
IFS=${IFS#?}
먼저 쉼표를 첫 번째 문자로 추가하고 $IFS
변수의 이전 값을 쉼표 뒤의 문자로 유지합니다.
매개변수 대체는 ${IFS#?}
첫 번째 문자(우리가 추가한 쉼표)를 제거합니다.