Pergunta

Existe no linux bash algo semelhante ao seguinte código em PHP:

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

ou sejavocê atribui em uma frase um valor correspondente a 3 variáveis ​​diferentes.

Digamos que eu tenha a função bash myBashFuntion que grava no stdout a string "qwert asdfg zxcvb".É possível fazer algo como:

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

A parte à esquerda do sinal de igual não é uma sintaxe válida, é claro.Só estou tentando explicar o que estou pedindo.

O que funciona, porém, é o seguinte:

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

Mas um array indexado não é tão descritivo quanto nomes simples de variáveis.
No entanto, eu poderia apenas fazer:

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

Mas essas são mais três afirmações que prefiro evitar.

Estou apenas procurando uma sintaxe de atalho.É possível?

Foi útil?

Solução

A primeira coisa que me vem à cabeça:

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

a saída é, sem surpresa

1|2|3

Outras dicas

Eu queria atribuir os valores a um array.Então, estendendo A abordagem de Michael Krelin, Eu fiz:

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

que produz:

2|4|6 

como esperado.

Acho que isso pode ajudar...

Para dividir as datas inseridas pelo usuário (dd/mm/aaaa) em meus scripts, armazeno o dia, o mês e o ano em uma matriz e, em seguida, coloco os valores em variáveis ​​separadas, como segue:

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

Às vezes você tem que fazer algo estranho.Digamos que você queira ler um comando (o exemplo de data do SDGuero, por exemplo), mas deseja evitar múltiplas bifurcações.

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

Você também pode inserir o comando read, mas precisará usar as variáveis ​​​​dentro de um subshell:

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

resulta em...

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

Capítulo 5 do Livro de receitas do Bash por O'Reilly, discute (com certa extensão) as razões para a exigência em uma atribuição de variável de que não haja espaços ao redor do sinal '='

MYVAR="something"

A explicação tem a ver com a distinção entre o nome de um comando e uma variável (onde '=' pode ser um argumento válido).

Tudo isso parece um pouco com uma justificativa após o evento, mas em qualquer caso não há menção a um método de atribuição a uma lista de variáveis.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top