$string="name: Destination Administrator
description: Manage the destination configurations, certificates and subaccount trust.
readOnly:
roleReferences:
- roleTemplateAppId: destination-xsappname!b62
roleTemplateName: Destination_Administrator
name: Destination Administrator"
我有上面的字串,每一行都由換行符分隔,我喜歡在“-”之后創建兩列陣列,如下所示
Col1 col2
roleTemplateAppId destination-xsappname!b62
roleTemplateName Destination_Administrator
name Destination Administrator
我在下面嘗試過,但它沒有回傳正確的陣列
IFS='- ' read -r -a arrstring <<< "$string"
echo "${arrstring [1]}"
uj5u.com熱心網友回復:
假設:
- OP 無法使用 yaml 決議器(根據 Léa 的評論)
- 輸入保證有
\n行尾(在資料內) - 在
-僅示出了在一個位置(如在OP的樣本輸入描繪); 否則我們需要更好地定義從哪里開始決議資料 - 我們有興趣決議后面的所有內容
- - 資料將基于
:分隔符進行決議,第一個欄位作為關聯陣列中的索引,而第二個欄位將是存盤在陣列中的值 - 要從陣列索引和值中洗掉前導/尾隨空格
sed僅提取我們感興趣的行的一個想法:
$ sed -n '/- /,${s/-//;p}' <<< "${string}"
roleTemplateAppId: destinationxsappname!b62
roleTemplateName: Destination_Administrator
name: Destination Administrator
添加更多位以去除前導/尾隨空格:
$ sed -n '/- /,${s/-//;s/^[ ]*//;s/[ ]*$//;s/[ ]*:[ ]*/:/;p}' <<< "${string}"
roleTemplateAppId:destination-xsappname!b62
roleTemplateName:Destination_Administrator
name:Destination Administrator
從這里我們將把它提供給一個while回圈,在那里我們將填充關聯陣列
unset arrstring
declare -A arrstring # declare as an associative array
while IFS=':' read -r index value
do
arrstring["${index}"]="${value}"
done < <(sed -n '/- /,${s/-//;s/^[ ]*//;s/[ ]*$//;s/[ ]*:[ ]*/:/;p}' <<< "${string}")
留給我們:
$ typeset -p arrstring
declare -A arrstring=([roleTemplateAppId]="destination-xsappname!b62" [name]="Destination Administrator" [roleTemplateName]="Destination_Administrator" )
$ for i in "${!arrstring[@]}"
do
echo "$i : ${arrstring[$i]}"
done
roleTemplateAppId : destination-xsappname!b62
name : Destination Administrator
roleTemplateName : Destination_Administrator
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/333631.html
上一篇:sh中的壞替換bash等價物
