Удар Linux: Несколько переменное присвоение

Действительно существует в ударе 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 оператора, которых я предпочел бы избегать.

Я просто ищу синтаксис ярлыка. Действительно ли это возможно?

106
задан GetFree 23 December 2009 в 12:03
поделиться

3 ответа

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

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

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

1|2|3
201
ответ дан 24 November 2019 в 03:49
поделиться

Глава 5 книги Bash Cookbook О'Райли рассматривает (в некоторой степени) причины требования в присваивании переменной о том, что вокруг знака '=' не должно быть пробелов

MYVAR="something"

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

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

.
0
ответ дан 24 November 2019 в 03:49
поделиться

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

Чтобы разбить в моих скриптах введенные пользователем даты (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]}`)
4
ответ дан 24 November 2019 в 03:49
поделиться