Designação padrão para uma variável nula com substituição de comando

3

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?

    
por Roberto Di Cecco 26.07.2016 / 11:04

2 respostas

4

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}
    
por 26.07.2016 / 11:13
2

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.

    
por 26.07.2016 / 11:24