Attualmente sto scrivendo un framework di test di bash, in cui in una funzione di test possono essere utilizzati sia i test di bash standard ([[
) che gli abbinamenti predefiniti. I matcher sono wrapper di '[[' e oltre a restituire un codice di ritorno, imposta un messaggio significativo che dice cosa ci si aspettava.Utilizzo di unset e impostazione di una variabile a vuoto
Esempio:
string_equals() {
if [[ ! $1 = $2 ]]; then
error_message="Expected '$1' to be '$2'."
return 1
fi
}
Così, quando viene utilizzato un matcher, e non riesce, solo allora un error_message è impostato.
Ora, a un certo punto, ho verificato se i test hanno avuto esito positivo. Se è riuscito, stampo l'aspettativa in verde, se non è riuscita in rosso.
Inoltre, ci può essere un insieme error_message, quindi verificare se esiste un messaggio, stamparlo, e quindi non impostato (perché il seguente test non può impostare un error_message
):
if [[ $error_message ]]; then
printf '%s\n' "$error_message"
unset -v error_message
fi
Ora la mia domanda è, se è meglio disinserire la variabile, o semplicemente impostarla su "", come
error_message=''
Quale è meglio? In realtà fa la differenza? O forse dovrei avere una bandiera aggiuntiva che indica che il messaggio è stato impostato?
Se non si confronta mai 'error_message' con qualcos'altro, direi che non importa. Comunque, penso che tu voglia '[[$ error_message]]', altrimenti stai testando che esiste la stringa letterale "error_message". – chepner
@chepner Sì, era un refuso. Aggiustato. – helpermethod