
我正在嘗試使用字串替換來組合數組。輸出:
a,b,c
下面的方法可行,但是有沒有辦法不用管道呢?
#!/bin/bash
words=(a b c)
echo "${words[@]}" | sed 's/ /,/g'
我已經嘗試過這個,但行不通。
echo "${words[@]// /,/}"
答案1
如果要輸出由特定字元分隔的陣列元素組成的字串,請使用
words=(a b c)
( IFS=,; printf '%s\n' "${words[*]}" )
使用in*
代替in將從數組的所有元素的串聯中建立一個字串。元素將由 的第一個字元分隔,這就是為什麼我們在進行擴展之前將其設定為逗號。@
"${words[*]}"
words
$IFS
我IFS
在子 shell 中進行設置,以避免無意中將其設置為除為調用創建逗號分隔字串所需的單個擴展之外的任何其他操作printf
。
IFS
您可以設定然後重置它,而不是使用子 shell 進行本地設定:
words=(a b c)
IFS=,$IFS
printf '%s\n' "${words[*]}"
IFS=${IFS#?}
首先加入一個逗號作為 的第一個字符$IFS
,保留變數的舊值作為逗號後面的字符。
參數替換${IFS#?}
將刪除第一個字元(我們新增的逗號)。