Parameter Substituição

1

Eu quero saber a diferença entre as duas opções a seguir para a substituição de parâmetros no Linux.

echo ${MESG:? "HI"}
echo ${MESG:- "HI"}

Ambos parecem fazer a mesma coisa.

    
por Yousif Shibeika 23.04.2018 / 16:29

2 respostas

2

Do manual bash ( o padrão POSIX tem um texto semelhante ):

${parameter:-word}: Use Default Values. If parameter is unset or null, the expansion of word is substituted. Otherwise, the value of parameter is substituted.

${parameter:?word}: Display Error if Null or Unset. If parameter is null or unset, the expansion of word (or a message to that effect if word is not present) is written to the standard error and the shell, if it is not interactive, exits. Otherwise, the value of parameter is substituted.

Se a variável MESG for uma cadeia de caracteres não nula, eles farão o mesmo (expandir para o valor da variável MESG ). Se estiver vazio ou não estiver definido, ${MESG:-HI} será substituído pela string HI e ${MESG:?HI} exibirá HI no erro padrão e sairá da sessão atual do shell (a menos que seja uma sessão interativa). / p>     

por 23.04.2018 / 16:42
-1

Se o MESG não estiver definido,

echo ${MESG:?}

imprimiria

MESG: parameter null or not set


echo ${MESG:-}

imprimiria

<empty string>

O? e - portanto, determina como as variáveis nulas ou não definidas são tratadas

    
por 23.04.2018 / 16:40

Tags