Bash esegue da solo la suddivisione delle parole in stringhe, infatti, il più delle volte, evitarlo è un problema e il motivo per cui citare è così importante. È facile sfruttarlo nel tuo caso:basta inserire la stringa in un array senza virgolette:bash utilizzerà la divisione delle parole per separare i singoli elementi. Supponendo che la tua stringa sia memorizzata nella variabile $str
,
ar=($str) # no quotes!
restituirà un array di 5 elementi. L'indice dell'array è l'indice delle parole (contando a partire da 0, come nella maggior parte dei linguaggi di scripting e programmazione), ad esempio "Age" è accessibile utilizzando
${ar[1]} # 0 => Name, 1 => Age, 2 => Sex, 3 => ID, 4 => Address
oppure, se hai bisogno di trovare l'indice dell'elemento in base al contenuto, esegui un ciclo sull'array, ad esempio
function el_index {
cnt=0; for el in "${ar[@]}"; do
[[ $el == "$1" ]] && echo $cnt && break
((++cnt))
done
}
el_index "Age" # => 1
$ export FOO="Name Age Sex ID Address"
Sostituisci *Age con Age -- questo rimuoverà qualsiasi cosa prima di "Age":
$ echo ${FOO/*Age/Age}
Age Sex ID Address
Ottieni qualsiasi cosa prima di "Age"
$ echo ${FOO/Age*/}
Name
Ottieni la lunghezza di quella stringa (che è l'indice di "Età"):
$ BEGIN=${FOO/Age*/}
$ echo ${#BEGIN}
7