私がのような配列を持っている場合
arr[0]=2019-06-26
arr[1]=15:21:54
どうすればそれを値がである文字列に変換できますか
'2019-06-26 15:21:54'
IFS変数の最初の文字がスペース(デフォルトではスペース)である場合は、スターインデックスを二重引用符で囲むことができます。
#! /bin/bash
arr[0]=2019-06-26
arr[1]=15:21:54
string="${arr[*]}"
printf "'%s'" "$string"
特別なパラメータの下に記載されています:
展開が二重引用符で囲まれている場合、各パラメーターの値がIFS特殊変数の最初の文字で区切られた単一のWordに展開されます。
完全を期すために、"${array[*]}"
Korn構文(Bourne "$*"
特殊パラメーターから拡張)もzshで機能しますが、zshではj
を使用することをお勧めします(- join)代わりに、任意の結合文字列を使用でき、$IFS
のようなグローバルパラメータに依存する必要がないパラメータ拡張フラグ。
$ a=(foo bar)
$ echo ${(j[:::])a}
foo:::bar
"${a[*]}"
の場合、ksh
(ksh93とmkshの両方)は、最初の文字ではなく、$IFS
の最初のbyteで結合することに注意してください。これは、次のようなマルチバイト文字にとって重要です。
$ 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のようなシェルはOKです:
$ 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