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.