Qual é o significado de “var = $ {str = expr}” no shell do linux?

1

Qual é o significado de "var = $ {str = expr}" no shell do linux? Quem pode explicar isso especificamente para mim?

    
por user3872279 29.07.2014 / 12:26

2 respostas

4

Veja "Expansão de Parâmetros" em man bash :

${parameter:=word} Assign Default Values. If parameter is unset or null, the expansion of word is assigned to parameter. The value of parameter is then substituted. Positional parameters and special parameters may not be assigned to in this way.

Os dois pontos são explicados acima:

When not performing substring expansion, using the forms documented below, bash tests for a parameter that is unset or null. Omitting the colon results in a test only for a parameter that is unset.

Evidências:

var=${str=expr}
echo $var
echo $str

Saída:

expr
expr
    
por 29.07.2014 / 13:14
-3

No bash você pode usar $ () para iniciar uma tarefa em um subshell.

Exemplo:

#!/usr/bin/env bash
foo=${ls}
echo $foo

Este script irá preencher a variável $ foo com o resultado de ls .
(e echo $foo mostrarão o conteúdo).


Agora, a sua pergunta mais específica. Eu não sabia o resultado também, então eu testei, assumindo que com o 'shell linux' você quer dizer bash, que é o shell padrão nas minhas distribuições linux.

Eu criei o seguinte arquivo:

#!/usr/bin/env bash
foo=${str="test 1 2 3"}
echo $foo

e executou:

> ./test t
test 1 2 3

Parece atribuir o valor iun a string (ou em sua expressão) à variável e para retornar esse valor ao script pai.


Para recapitular:

  • Um novo shell será iniciado
  • Esse novo shell executará o comando str=expr
  • O shell pai obterá o resultado como saída.
  • Os armazenamentos de shell pai que resultam em $ var.
por 29.07.2014 / 13:11

Tags