답변:
bash는 $ IFS를 사용하여 생성 된 단어에 참여하지 않는 것 같습니다. 또 다른 기술은 생성 된 단어를 배열에 저장 한 다음 $ IFS를 사용하는 것입니다 .
서브 쉘을 사용하여이 쉘의 IFS를 변경하지 않습니다.
( words=( a{b,c,d} ); IFS=,; echo "${words[*]}" )
( set -- a{b,c,d}; IFS=,; echo "$*" )
쉼표로 구분 된 문자열을 stdout으로 내 보냅니다. 캡처하려면 다음을 수행하십시오.
joined=$( set -- a{b,c,d}; IFS=,; echo "$*" )
표시 한대로 요소를 확장 한 다음 반복하여 첫 번째 반복을 제외한 모든 요소에 쉼표를 추가하십시오.
for i in a{b,c,d}; do
u="${u:+$u, }$i"
done
echo "$u"
결과:
ab, ac, ad
bash 매개 변수 대체를 참조하십시오 .
많은 상황에서 후행 쉼표가 그러한 목록에서 허용된다는 점은 주목할 가치가 있습니다. 경우 후행 쉼표 허용, 대체를 처리 할 수있는 가장 쉬운 방법입니다 printf
:
some-command "$(printf %s, a{b,c,d} )"
(어디 some-command
쉼표에서 실행 목록을 분리하고, 콤마 신경 쓰지 않는 명령입니다.)
실제로 쉼표가 없어도 사용할 수 있습니다 printf
. 당신은 당신이 기대하는 인수의 수를 지정해야하므로 매우 긴 목록을 위해 더 어색합니다.
some-command "$(printf %s,%s,%s a{b,c,d} )"