Действительно существует в ударе Linux что-то подобное следующему коду в PHP:
list($var1, $var2, $var3) = function_that_returns_a_three_element_array() ;
т.е. Вы присваиваете в одном предложении соответствующее значение к 3 различным переменным.
Скажем, у меня есть функция удара 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 оператора, которых я предпочел бы избегать.
Я просто ищу синтаксис ярлыка. Действительно ли это возможно?
Первое, что приходит мне в голову:
read -r a b c <<<$(echo 1 2 3) ; echo "$a|$b|$c"
выход, неудивительно
1|2|3
Глава 5 книги Bash Cookbook О'Райли рассматривает (в некоторой степени) причины требования в присваивании переменной о том, что вокруг знака '=' не должно быть пробелов
MYVAR="something"
Объяснение как-то связано с разграничением имени команды и переменной (где '=' может быть действительным аргументом).
Все это выглядит немного похожим на оправдание после события, но в любом случае нет никакого упоминания о способе присваивания списка переменных.
.Думаю, это может помочь...
Чтобы разбить в моих скриптах введенные пользователем даты (mm/dd/yyyy), я записываю день, месяц и год в массив, а затем складываю значения в отдельные переменные следующим образом:
DATE_ARRAY=(`echo $2 | sed -e 's/\// /g'`)
MONTH=(`echo ${DATE_ARRAY[0]}`)
DAY=(`echo ${DATE_ARRAY[1]}`)
YEAR=(`echo ${DATE_ARRAY[2]}`)