A substituição aninhada não está disponível em nenhum shell moderno semelhante ao Bourne, exceto zsh :
$ print -rl -- ${$(echo):-C}
C
$ print -rl -- ${$(echo 1):-C}
1
Em outros shells:
A=$(nc -l 443)
A=${A:-C}
Estou tentando usar a sintaxe:
A=${B:-C}
onde A é a variável, B é o valor que estou tentando atribuir, C é o valor padrão se B for nulo.
Agora, quero substituir B pelo comando nc -l 443 , portanto, se nc receber uma string pela porta 443, ela será atribuída à variável A , senão A será definido como o valor padrão. Eu escrevi o comando como:
A=${'nc -l 443':-NULL}
Mas recebo um erro:
-bash: A=${'nc -l 443':-NULL}: bad substitution
Como posso conseguir isso?
A substituição aninhada não está disponível em nenhum shell moderno semelhante ao Bourne, exceto zsh :
$ print -rl -- ${$(echo):-C}
C
$ print -rl -- ${$(echo 1):-C}
1
Em outros shells:
A=$(nc -l 443)
A=${A:-C}
No Bash, a linha
A=${B:-C}
atribuirá o valor da variável B à variável A se B estiver definido e não for nulo. Caso contrário, a variável A obterá o valor C , ou seja, a string contendo o único caractere C .
O que você pode querer fazer:
B=$( some command )
A=${B:-C}
Depois disso, $A será a saída de some command , se não for nulo, ou o caractere C , se for.