Bash
使用空格分隔符將數組類型變數轉換為字元串類型
如果我有一個像
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 特殊變數的第一個字元分隔。
為了完整起見,雖然
"${array[*]}"
Korn 語法(從 Bourne"$*"
特殊參數擴展而來)也適用於 zsh,但在 zsh 中,您可能希望使用j
(for join ) 參數擴展標誌,它允許您使用任意連接字元串並且不會t 需要依賴全域參數,例如$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-like shell 也可以:
$ 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