2013-07-23 11 views
5

So che set -u fallirà lo script se ci sono delle variabili non associate referenziate, ma nel mio script bash, sto verificando se una certa variabile non è impostata all'interno di un'istruzione if prima che tenti di fare qualcosa con esso, come così:Come posso controllare se una variabile non è impostata E usare set -u nel mio preludio di bash?

if [[ -z "${SOME_VARIABLE}" ]] ; then 
    echo '$SOME_VARIABLE' is not set 
else 
    do_stuff_with_SOME_VARIABLE 
fi 

Tuttavia, se provo a fare funzionare il suddetto con set -eu nel mio preludio, ottengo il seguente errore, che sembra un po 'un controsenso dato quello che sto cercando di fare:

-bash: SOME_VARIABLE: unbound variable 

[Process completed] 

Come puoi vedere, in realtà non sto cercando di usare $SOME_VARIABLE quando si ' s unset, quindi quello che mi piacerebbe sapere è se c'è un modo per fallire lo script quando sto provando a usare variabili unset (come passarle come argomenti o applicare manipolazioni di stringhe a loro) ma non quando sono semplicemente controllando per vedere se sono disinseriti?

risposta

7

è possibile utilizzare un'espansione:

if [ -z "${SOME_VARIABLE:-}" ]; then 
    echo '$SOME_VARIABLE' is not set 
else 
    do_stuff_with_SOME_VARIABLE 
fi 

Questo espande $SOME_VARIABLE a null. Maggiori informazioni sulla sostituzione dei parametri here (vedere la sezione ${parameter:-default} nella parte superiore)

+0

Semplicemente geniale. – kevinarpe

Problemi correlati