배열형 변수를 공백 구분자를 사용하여 문자열형으로 변환

배열형 변수를 공백 구분자를 사용하여 문자열형으로 변환

이런 배열이 있다면

arr[0]=2019-06-26
arr[1]=15:21:54

어떻게 값으로 변환할 수 있나요?

'2019-06-26 15:21:54'

답변1

IFS 변수의 첫 번째 문자가 공백(기본값)인 경우 큰따옴표 안에 별표 색인을 사용할 수 있습니다.

#! /bin/bash
arr[0]=2019-06-26
arr[1]=15:21:54

string="${arr[*]}"
printf "'%s'" "$string"

아래에 녹음됨특수 매개변수:

큰따옴표 내에서 확장이 발생하면 IFS 특수 변수의 첫 번째 문자로 구분된 각 인수의 값을 사용하여 단일 단어로 확장됩니다.

답변2

완전성을 기하기 위해 "${array[*]}"Korn 구문( "$*"Bourne 특수 매개변수에서 확장됨)도 zsh에서도 작동하지만 zsh에서는 다음을 사용해야 할 수도 있습니다 j.가입하다) 매개변수 확장 플래그를 사용하면 전역 매개변수에 의존하지 않고 임의의 연결 문자열을 사용할 수 있습니다. 예 $IFS:

$ a=(foo bar)
$ echo ${(j[:::])a}
foo:::bar

"${a[*]}", ksh(ksh93 및 mksh) 의 경우 첫 번째를 추가하십시오.바이트$IFS첫 번째 문자 대신 . 이는 다음과 같은 멀티바이트 문자에 중요합니다.

$ ksh -c 'a=(foo bar); IFS="⇅"; echo "${a[*]}"'
foo�bar
$ mksh -c 'a=(foo bar); IFS="⇅"; echo "${a[*]}"'
foo�bar
$ mksh -o utf8-mode -c 'a=(foo bar); IFS="⇅"; echo "${a[*]}"'
foo�bar

(이것이 내 터미널 에뮬레이터가 이 문자(0xe2)의 첫 번째 바이트를 렌더링하는 방법입니다. 이 문자 자체는 유효한 문자를 형성하지 않습니다.)

배열을 지원하는 다른 Korn 유사 쉘도 작동합니다.

$ bash -c 'a=(foo bar); IFS="⇅"; echo "${a[*]}"'
foo⇅bar
$ zsh -c 'a=(foo bar); IFS="⇅"; echo "${a[*]}"'
foo⇅bar
$ yash -c 'a=(foo bar); IFS="⇅"; echo "${a[*]}"'
foo⇅bar

관련 정보