このトピックと同じことをしたいのですが、bashバージョンを使用しています。4.1.2。
以下を使用して希望のチェーンを取得できます。
echo ${arr[@]:(-1)} | sed "s/,$///"
しかし、単に表示するのではなく、配列のインデックス値を変更したいと思います。
編集する
この文字除去を実行しようとしたときにループ内にあり、最後の要素に到達したことを指定します。したがって、配列の2番目の要素を変更したいと思います。
現在、次のような結果が得られます。
"array" : {
"key1" : "value1",
"key2" : "value2",
"key3" : "value3",
"key4" : "value4",
"key5" : "value5",
}
最後のカンマを削除したいです。(,)key5インデックスから。
(この時点で私は次のラインレベルにいます。})
編集2
私のループ
while read line
do
if [[ $line == *"<templateIdentifier>"* ]];then
if [[ $FILENUMBER == $NUMBEROFFILES ]];then
continue
elif [[ $FILENUMBER < $NUMBEROFFILES ]];then
nameArray=$(echo "customData")
arr[$INDEXARR]='"'$nameArray'" : {'
((INDEXARR++))
continue
fi
elif [[ $line == *"</templateIdentifier>"* ]];then
if [[ $FILENUMBER < $NUMBEROFFILES ]];then
continue
elif [[ $FILENUMBER == $NUMBEROFFILES ]];then
echo ${arr[@]:(-1)} | sed "s/,$//"
arr[$INDEXARR]=' }'
continue
fi
elif [[ $line == *['<']* ]] && [[ $line != *[?'!'-]* ]] && [[ $line != *"<templateIdentifier>"* ]];then
name=$(echo $line | awk -F '<' {'print $2'} | awk -F '>' {'print $1'})
value=$(echo $line | awk -F '>' {'print $2'} | awk -F '</' {'print $1'})
arr[$INDEXARR]=$(echo -e ' \t ')'"'$name'" : "'$value'",'
((INDEXARR++))
else
continue
fi
done < $file