配列型変数をスペース区切り文字を使用して文字列型に変換する

配列型変数をスペース区切り文字を使用して文字列型に変換する

このような配列があれば

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

関連情報