Üzgünüm onlarca kez tartışılan bir konu hakkında bir soru yayınlarsam. Bir ilişkisel dizinin bir öğesi üzerinde çalışmaya ve onu bir diziye atamaya çalışıyorum. Bash ilişkisel dizilerinin tek boyutlu olduğunu biliyorum, ancak bash içindeki tırnakların string genişlemesini kullanarak bir dizi atayacağım. Sonunda iki adımda yapmayı başardım ama neden bu fazladan ödeve ihtiyacım olduğunu ve bundan kaçınabiliyorsam bilmiyorum.
İşte senaryo
FILE="/home/user/scripts/snapstbylist"
declare -A stby
while read line; do
DS=${line%@*}
SNAPSHOT=${line#*@}
stby+=(["$DS"]=" $SNAPSHOT")
done < <(awk '/stby/{print $1}' $FILE)
for ds in "${!stby[@]}"; do
# echo ":-) $ds"
DATASET2=( "${stby["$ds"]}" )
DATASET=($DATASET2)
LAST="${DATASET[-1]}"
echo "The dataset list $ds contains ${#DATASET[@]} elements, i.e. ${DATASET[@]}"
done
DATASET2 içinde kelimeler bulunan bir dizedir, sonunda DATASET istediğim dizidir. DATASET = ($ DATASET2) atamasını engellemenin ve DATASET2 olarak istediğim diziye sahip olmanın bir yolu var mı?
Extract of the file /home/user/scripts/snapstbylist
zserver02/home/GROUP/biastby@d20140123 227K - 471M -
zserver02/home/GROUP/biastby@d20140128 233K - 471M -
zserver02/home/GROUP/biastby@d20140129 206K - 471M -
zserver02/home/GROUP/biastby@d20140130 240K - 471M -
zserver02/home/GROUP/biastby@d20140131 438K - 471M -
zserver02/home/GROUP/biastby@d20140201 244K - 471M -
zserver02/home/GROUP/biastby@d20140202 220K - 471M -
zserver02/home/GROUP/biastby@d20140204 0 - 832M -
zserver02/home/GROUP/bloombergstby@d20131119 0 - 148K -
zserver02/home/GROUP/bloombergstby@initback02 0 - 148K -
zserver02/home/GROUP/caestby@d20131228 0 - 626M -
zserver02/home/GROUP/gtistby@d20140125 0 - 131K -
zserver02/home/GROUP/juastby@d20140107 0 - 130K -
zserver02/home/GROUP/kepstby@d20140118 0 - 138K -
zserver02/home/GROUP/koastby@d20131227 93K - 145K -
Bu şekilde toplayabilirim, neden
"$ {STBY [" $ ds "]}"
içinde
DATASET2 = ("$ {stby [" $ ds "]}")
genişletilmedi?
Şimdiden teşekkürler,
Alex