Вопрос

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

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

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

Допустим, у меня есть функция bash myBashFuntion который записывает в стандартный вывод строку «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]}

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

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

Это было полезно?

Решение

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

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

результат, что неудивительно

1|2|3

Другие советы

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

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

который дает:

2|4|6 

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

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

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

DATE_ARRAY=(`echo $2 | 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

Вы также можете передать команду чтения по конвейеру, но тогда вам придется использовать переменные внутри подоболочки:

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 Поваренная книга Баша О'Рейли обсуждает (достаточно подробно) причины требования при назначении переменной, чтобы вокруг знака '=' не было пробелов.

MYVAR="something"

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top