A volte devi fare qualcosa di funky. Diciamo che vuoi leggere da un comando (l'esempio di data di SDGuero per esempio) ma vuoi evitare più fork.
read month day year << DATE_COMMAND
$(date "+%m %d %Y")
DATE_COMMAND
echo $month $day $year
Potresti anche reindirizzare il comando read, ma poi dovresti usare le variabili all'interno di una subshell:
day=n/a; month=n/a; year=n/a
date "+%d %m %Y" | { read day month year ; echo $day $month $year; }
echo $day $month $year
risulta in...
13 08 2013
n/a n/a n/a
La prima cosa che mi viene in mente:
read -r a b c <<<$(echo 1 2 3) ; echo "$a|$b|$c"
l'output è, ovviamente
1|2|3
Volevo assegnare i valori a un array. Quindi, estendendo l'approccio di Michael Krelin, ho fatto:
read a[{1..3}] <<< $(echo 2 4 6); echo "${a[1]}|${a[2]}|${a[3]}"
che produce:
2|4|6
come previsto.
Penso che questo potrebbe aiutare...
Per suddividere le date inserite dall'utente (mm/gg/aaaa) nei miei script, memorizzo il giorno, il mese e l'anno in un array, quindi metto i valori in variabili separate come segue:
DATE_ARRAY=(`echo $2 | sed -e 's/\// /g'`)
MONTH=(`echo ${DATE_ARRAY[0]}`)
DAY=(`echo ${DATE_ARRAY[1]}`)
YEAR=(`echo ${DATE_ARRAY[2]}`)