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 :-
VALUE = $ {VAR | | o}
Eu encontrei esta atribuição de variável no script de shell. Eu não entendo porque || sinal é usado aqui.
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
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 :-
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.
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).