Linux bash: назначение нескольких переменных

существует ли в linux bash что-то похожее на следующий код в PHP:

list($var1, $var2, $var3) = function_that_returns_a_three_element_array() ;

т. е. вы присваиваете в одном предложении соответствующее значение 3 различным переменным.

предположим, у меня есть функция bash myBashFuntion это записывает в stdout строку "qwert asdfg zxcvb". Можно ли сделать что-то вроде:

(var1 var2 var3) = ( `myBashFuntion param1 param2` )

часть слева от знака равенства, конечно, не является допустимым синтаксисом. Я просто пытаюсь объяснить, о чем прошу. для.

что действительно работает, однако, следующее:

array = ( `myBashFuntion param1 param2` )
echo ${array[0]} ${array[1]} ${array[2]}

но индексированный массив не так описателен, как простые имена переменных.
Тем не менее, я мог бы просто сделать:

var1 = ${array[0]} ; var2 = ${array[1]} ; var3 = ${array[2]}

но это еще 3 утверждения, которых я бы предпочел избежать.

Я просто ищу синтаксис ярлыка. Возможно ли это?

5 ответов


Первое, что приходит в голову:

read -r a b c <<<$(echo 1 2 3) ; echo "$a|$b|$c"

выход, неудивительно

1|2|3

Я хотел присвоить значения массиву. Итак, расширение Майкл Krelin это, Я:

read a[{1..3}] <<< $(echo 2 4 6); echo "${a[1]}|${a[2]}|${a[3]}"

что дает:

2|4|6 

как и ожидалось.


Я думаю, это может помочь...

чтобы разбить введенные пользователем даты (mm/dd / yyyy) в моих скриптах, я храню день, месяц и год в массиве, а затем помещаю значения в отдельные переменные следующим образом:

DATE_ARRAY=(`echo  | sed -e 's/\// /g'`)
MONTH=(`echo ${DATE_ARRAY[0]}`)
DAY=(`echo ${DATE_ARRAY[1]}`)
YEAR=(`echo ${DATE_ARRAY[2]}`)

иногда вы должны сделать что-то фанки. Предположим, вы хотите прочитать из команды (например, пример даты SDGuero), но вы хотите избежать нескольких вилок.

read month day year << DATE_COMMAND
 $(date "+%m %d %Y")
DATE_COMMAND
echo $month $day $year

вы также можете передать в команду read, но тогда вам придется использовать переменные в подрешетке:

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

результат...

13 08 2013
n/a n/a n/a

Глава 5 Bash Поваренная Книга O'Reilly, обсуждает (в некоторой длине) причины требования в назначении переменной, чтобы не было пробелов вокруг знака'='

MYVAR="something"

объяснение имеет какое-то отношение к различению между именем команды и переменной (где " = " может быть допустимым аргументом).

все это немного похоже на оправдание после события, но в любом случае нет упоминания о методе назначения к списку переменных.