Manchmal muss man etwas verrücktes tun. Angenommen, Sie möchten aus einem Befehl lesen (z. B. das Datumsbeispiel von SDGuero), aber Sie möchten mehrere Gabeln vermeiden.
read month day year << DATE_COMMAND
$(date "+%m %d %Y")
DATE_COMMAND
echo $month $day $year
Sie könnten auch in den read-Befehl leiten, aber dann müssten Sie die Variablen innerhalb einer Subshell verwenden:
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
ergibt ...
13 08 2013
n/a n/a n/a
Das erste, was mir in den Sinn kommt:
read -r a b c <<<$(echo 1 2 3) ; echo "$a|$b|$c"
Ausgabe ist wenig überraschend
1|2|3
Ich wollte die Werte einem Array zuweisen. Als Erweiterung von Michael Krelins Ansatz habe ich also Folgendes getan:
read a[{1..3}] <<< $(echo 2 4 6); echo "${a[1]}|${a[2]}|${a[3]}"
was ergibt:
2|4|6
wie erwartet.
Ich denke, das könnte helfen...
Um vom Benutzer eingegebene Daten (MM/TT/JJJJ) in meinen Skripten aufzuschlüsseln, speichere ich Tag, Monat und Jahr in einem Array und lege die Werte dann wie folgt in separate Variablen:
DATE_ARRAY=(`echo $2 | sed -e 's/\// /g'`)
MONTH=(`echo ${DATE_ARRAY[0]}`)
DAY=(`echo ${DATE_ARRAY[1]}`)
YEAR=(`echo ${DATE_ARRAY[2]}`)