답변1
문자열을 다시 재구성하기 위해 문자열을 개별 문자로 배열로 읽는 방법은 잘 보이지 않지만 IFS
단일 공백으로 설정하면 배열 요소 사이에 단일 공백이 삽입됩니다 "${arr[*]}"
. 대신 IFS
빈 문자열로 설정하세요.
readarray -t arr < <( grep -o . <<<"$1" )
( IFS=''; printf '%s\n' "${arr[*]}" )
IFS
나는 스크립트의 나머지 부분에서 값을 변경하지 않도록 서브쉘을 사용하여 as 및 as를 할당했습니다 printf
.IFS
답변2
*
in의 사용은 "${arr[*]}"
소개입니다첫 번째 문자배열의 각 요소에 대한 구분 기호로 IFS에서 가져옵니다. IFS를 변경해 볼 수 있습니다.
readarray -t arr < <(grep -o . <<< "$input")
( IFS=''; echo "${arr[*]}" )
또는 복잡한 평가 지연을 위해 eval을 사용해 보세요.
readarray -t arr < <(grep -o . <<< "$input")
IFS='' eval 'echo "array= ${arr[*]}"'
그러나 간단한 printf만 필요한 경우 하위 쉘을 시작하거나(현재 쉘에서 IFS 변경을 피하기 위해) 평가 위험을 증가시킬 필요가 없습니다.
readarray -t arr < <(grep -o . <<< "$input")
printf '%s' "${arr[@]}" $'\n'
grep은 내부 개행 문자를 모두 제거한다는 점에 유의하세요 $input
.
배열 요소에서 개행 문자를 얻으려면(작은 입력의 경우):
[[ $input =~ ${input//?/(.)} ]] && arr=("${BASH_REMATCH[@]:1}")
printf '%s' array= "${arr[@]}" $'\n'