04 febbraio, 2020

Bash scripts - cose che devo ricordarmi - 7


Arrays
Bash ha anche gli arrays; ecco oggi li ripasso perché ho scoperto che è proprio quello che mi serve.

Creare un array e usarlo è semplice, si può fare con declare e poi usare, così (a0):

declare -a arr
arr=("alfa", "beta", "g a m m a" "delta")

echo -e "\nprint dell'array"
echo "${arr[@]}"

echo -e '\nprint un elemento per riga'
for ele in "${arr[@]}"; do
    echo $ele
done

larr="${#arr[@]}"
echo -e "\nlunghezza dell'array" $larr

$ bash a0

print dell'array
alfa, beta, g a m m a delta

print un elemento per riga
alfa,
beta,
g a m m a
delta

lunghezza dell'array 4
$

OK! Ah: arrays can be sparse so you shouldn't use the length to get the last element. Here's how you can in Bash 4.2 and later (a1):


#declare -a arr
arr=("alfa", "beta", "g a m m a" "delta")
arr[5]='epsilon'
unset "arr[2]"
echo 'array:' "${arr[@]}"

uarr="${arr[-1]}"
echo -e "\nultimo elemento" $uarr

echo -e '\nelemento n. 3:' "${arr[3]}"

echo -e '\n3 caratteri elemento n. 3:' "${arr[3]:0:3}"
echo -e '\nultimo elemento,\n5 caratteri a partire dal 2:' "${arr[-1]: 2:5}"


$ bash a1
array: alfa, beta, delta epsilon

ultimo elemento epsilon

elemento n. 3: delta

3 caratteri elemento n. 3: del

ultimo elemento,
5 caratteri a partire dal 2: silon
$

pare che declare non serva; unset funziona ma poi l'array diventa sparso e non posso più fare affidamento sull'indice, neanche se opero su una copia, affidarsi al ciclo come nel primo script.

Non ne parlo ma c'è anche l'array associativo, dichiarato così:
declare -A name.

🔴🔵

Nessun commento:

Posta un commento