대괄호 확장을 사용하지만 출력에서 ​​구분 기호로 공백 대신 쉼표를 사용하려면 어떻게 해야 합니까?

대괄호 확장을 사용하지만 출력에서 ​​구분 기호로 공백 대신 쉼표를 사용하려면 어떻게 해야 합니까?

대신 IFS=",";echo {1..5}출력하려면 어떻게 해야 합니까 ? bash echo {1..5}를 만들고 쉼표로 값을 출력하려면 어떻게 해야 합니까?1,2,3,4,51 2 3 4 5

답변1

Bash의 내장 기능을 사용하세요:

5후행 쉼표를 피하기 위해 구분해야 하기 때문에 이는 약간 보기 흉합니다 .

$ printf '%s,' {1..4}; echo 5
1,2,3,4,5

이후 printf변수에 직접 출력할 수 있지만 매개변수 확장을 통해 이 문제를 해결하고 마지막 쉼표를 제거할 수 있습니다.

$ printf -v tmpvar "%s," {1..5}; echo "${tmpvar%,}"
1,2,3,4,5

또는 "$*"첫 번째 문자를 사용하여 연결하는 with 입니다 IFS. 이는 전역 상태를 파괴하지만 서브셸이나 함수에서 실행하면 이를 쉽게 피할 수 있습니다 local IFS.

$ IFS=,; set -- {1..5}; echo "$*";
1,2,3,4,5

제한이 변수에 있는 경우 가장 쉬운 방법은 루프를 사용하여 수동으로 수행하는 것입니다. 중괄호 확장 범위에서는 변수를 끝점으로 사용할 수 없기 때문입니다. 다시 말하지만, 상한은 특별한 경우입니다.

a=1; b=5
for (( i=a ; i<b ; i++ )); do
    printf "$i,";
done;
printf "$b\n" 

답변2

다음을 사용해 보세요:

seq --separator="," 1 5

답변3

숫자 중괄호 확장을 사용하고 있으므로 발생하는 유일한 공백은 숫자 사이의 공백이므로 결과를 후처리할 수 있습니다.

output=$(echo {1..5} | tr ' ' ',')

또는

output=$(echo {1..5} | sed 's/ /,/g')

답변4

공백과 쉼표를 허용하는 경우 다음을 시도하십시오.

$ echo {1..5},
1, 2, 3, 4, 5,

관련 정보