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 $foo
mostrará 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 comando
str=expr
- O shell pai obterá o resultado como saída.
- O shell pai armazena o resultado em $var.