Mi scuso in anticipo se questa è una domanda duplicata. Ho fatto uno sforzo per cercare / controllare prima di chiedere qui.
Sono a mio agio con la scrittura di una riga come questa:
foocommand && foocommand2 && foocommand3
L'idea è che voglio solo i successivi comandi da eseguire se il precedente ha avuto successo.
Sto scrivendo una sceneggiatura piuttosto lunga e questo one-liner non è fattibile perché sembra un enorme blocco di codice confuso per tutti gli altri.
Voglio spaziare i comandi e scrivere commenti tra loro nello script. Come posso fare questo e avere ancora l'equivalente di && lì dentro?
||
e &&
(al contrario di |
o &
) è chiamato corto circuito. Il comportamento usato con questi ultimi operatori è chiamato valutazione desiderosa.
a && b && c
verrà eseguito solo in b
caso di a
successo, quindi "funziona solo c
se b
riesce" e "funziona solo c
se a
ed b
entrambi hanno successo" sono istruzioni equivalenti: b
non possono avere successo se non ci sono a
riuscite.
a || b && c
è più illustrativo.
true || false && echo hi
verrà emesso hi
. La specifica recita, Gli operatori "&&" e "||" deve avere la stessa precedenza e deve essere valutato con associatività di sinistra.
&&
non significa che il comando successivo verrà eseguito se il precedente uno ha avuto successo. Significa che il comando verrà eseguito se il risultato collettivo di tutti i comandi precedenti nell'elenco dei comandi ha esito positivo. Potresti saperlo, ma i futuri lettori potrebbero fraintendere.