Ответ 1
Первое, что приходит мне в голову:
read -r a b c <<<$(echo 1 2 3) ; echo "$a|$b|$c"
вывод неудивительно
1|2|3
Существует ли в 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]}
Но это еще три заявления, которые я бы предпочел избежать.
Я просто ищу синтаксис ярлыков. Возможно ли это?
Первое, что приходит мне в голову:
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
Вы также можете подключиться к команде 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 Cookbook от O'Reilly обсуждает (в некоторой степени) причины требования в переменной что не должно быть пробелов вокруг знака '='
MYVAR="something"
Объяснение имеет какое-то отношение к различию между именем команды и переменной (где '=' может быть допустимым аргументом).
Все это кажется немного оправданным после события, но в любом случае нет упоминания о методе присваивания списку переменных.