Erro de sintaxe de atribuição variável no shell [closed]

1

VALUE = $ {VAR | | o}

Eu encontrei esta atribuição de variável no script de shell. Eu não entendo porque || sinal é usado aqui.

EDITAR

Código dado em um comentário :

#!/bin/bash
source /opt/cpf/bin/cpf_logging_helper.sh
STATE=$1
DNS_MASTER=${TEST.DNS.DNS_MASTER:-o}
service status dns > /dev/null
rval=$?
if [ $rval -eq 0 ]
then
    if [ $DNS_MASTER == 'hostname -s' ]
    then
        echo "1"
    else
        echo "2"
    fi
fi
    
por Gaurav KS 03.06.2016 / 08:31

3 respostas

1

Parece que o codificador original pretendia usar o valor de $VAR ou o se não estiver definido. Em bash , isso pode ser alcançado usando:

VALUE=${VAR:-o}

Veja também man bash e pesquise Parameter Expansion ou :-

    
por 03.06.2016 / 08:44
1

A estrutura: VALUE=${VAR| |o} é inválida em dash, bash, ksh e zsh.

Se o | | for realmente um / / , então ele pode (?) fazer sentido no bash.

Isso significaria: substituir a primeira ocorrência de um espaço por o .

Se isso é um substituto razoável é outra questão. Eu não acredito que seja.

No código adicionado na edição, os pontos não são válidos em um nome de variável nem em traço, bash ou zsh e sob condições muito específicas em ksh.
Isso falhará no bash:

DNS_MASTER=${TEST.DNS.DNS_MASTER:-o}

Além disso, este teste está incorreto, devido ao espaço em branco e porque o comando hostname não está sendo executado:

if [ $DNS_MASTER == hostname -s ]

Uso:

if [ "$DNS_MASTER" == "$(hostname -s)" ]

No geral, o código que você apresenta não funcionou corretamente no bash e é confuso na maioria dos shells. Edite sua pergunta para torná-la relevante.

    
por 03.06.2016 / 14:28
0

O mais próximo que eu posso pensar de um operador de shell que se parece com isso, é o bash patch que William Park mantinha nos anos 2004-2008 que veio com algumas extensões mais ou menos úteis para bash3.

Entre eles, uma série de operadores de expansão de parâmetros que tudo começou com ${var|...} , alguns deles lembrando os flags de parâmetro de zsh (embora com uma sintaxe completamente diferente).

Nesse shell, ${var| |o} teria sido analisado como ${var|cmd} (significaria ser mais ou menos o mesmo que $(cmd "$var"} ), mas resultaria em um erro invalid command , pois |o não seria ser visto como um nome de comando válido (mesmo se você criou um comando com esse nome).

    
por 03.06.2016 / 16:39