Eu tenho um monte de testes de variáveis em um script de shell bash (3.00), onde se a variável não estiver definida, ela atribui um padrão, por exemplo:
if [ -z "${VARIABLE}" ]; then
FOO='default'
else
FOO=${VARIABLE}
fi
Eu me lembro que há alguma sintaxe para fazer isso em uma linha, algo semelhante a um operador ternário, por exemplo:
FOO=${ ${VARIABLE} : 'default' }
(embora eu saiba que não vai funcionar ...)
Eu sou louco, ou existe algo assim?
Respostas:
Muito perto do que você postou, na verdade:
Ou, o que irá atribuir
default
aoVARIABLE
bem:fonte
Para argumentos de linha de comando:
que atribui ao
VARIABLE
valor do 1º argumento passado ao script ou ao valor deDEFAULTVALUE
se nenhum argumento foi passado.fonte
Se a variável for a mesma, então
atribui DEFAULT_VALUE a VARIABLE, se não definido. As aspas duplas impedem a ocorrência de globbing e divisão de palavras.
Consulte também a Seção 3.5.3, Expansão de parâmetros do shell , no manual do Bash.
fonte
HISTTIMEFORMAT
: ${FOO:=DEFAULT1} ${BAR:=DEFAULT2}
Mesmo você pode usar como valor padrão o valor de outra variável
tendo um arquivo
defvalue.sh
executar
./defvalue.sh first-value second-value
saídae execute a
./defvalue.sh first-value
saídafonte
veja aqui em 3.5.3 (expansão dos parâmetros do shell)
então no seu caso
fonte
Para responder à sua pergunta e em todas as substituições de variáveis
fonte
FWIW, você pode fornecer uma mensagem de erro da seguinte forma:
Isso exibe uma mensagem como esta e sai com o código 1:
Um exemplo mais completo de tudo:
Resultado:
$ACTION
pega o valor do primeiro argumento e sai se estiver vazio$DIRNAME
é o segundo argumento e o padrão é o diretório atual$OUTPUT_DIR
é o terceiro argumento, ou$HOMEDIR
(se definido), caso contrário/tmp
,. Isso funciona no OS X, mas não tenho certeza de que seja portátil.fonte
Depois, há a maneira de expressar sua construção "se" de maneira mais concisa:
fonte
Aqui está um exemplo
salve isso como script.sh e torne-o executável. executá-lo sem parâmetros
executá-lo com param
fonte