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

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

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

Responder1

Consulte "Expansão de parâmetros" em man bash:

${parameter:=word} Atribuir valores padrão. Se o parâmetro não estiver definido ou for nulo, a expansão da palavra será atribuída ao parâmetro. O valor do parâmetro é então substituído. Parâmetros posicionais e parâmetros especiais não podem ser atribuídos desta forma.

Os dois pontos são explicados acima:

Quando não estiver executando a expansão de substring, usando os formulários documentados abaixo, o bash testa um parâmetro que não está definido ou é nulo. A omissão dos dois pontos resulta em um teste apenas para um parâmetro que não está definido.

Evidência:

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

Saída:

expr
expr

Responder2

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

Exemplo:

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

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


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

Criei o seguinte arquivo:

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

e executei:

> ./test t
test 1 2 3

Parece atribuir o valor na string (ou na sua expressão) à variávelepara retornar esse valor ao script pai.


Para recapitular:

  • Um novo shell será iniciado
  • Esse novo shell executará o comandostr=expr
  • O shell pai obterá o resultado como saída.
  • O shell pai armazena o resultado em $var.

informação relacionada