Commenti
- Lesempio funziona per me; cosa ottieni?
- @JeffSchaller Scusa, ho chiarito meglio. Quello che voglio dire è che “\” è necessario per alcune cose ma non per altre. Voglio solo sapere come usarlo correttamente. E per qualche strana ragione \ non può essere evidenziato dallasterisco nei commenti
- \ è una continuazione esplicita; bash ti dà PS2 se il comando non è ancora completo. È questa la confusione?
- Io ' non sono sicuro che sia un duplicato, almeno come richiesto nel titolo. Sebbene lOP chieda nel contesto di & &, è ancora abbastanza generale che si potrebbe fornire una risposta più completa che non è specifica a quello.
Risposta
Se laffermazione sarebbe corretta senza continuazione, è necessario utilizzare \
. Pertanto, quanto segue funziona senza una barra rovesciata, poiché non è possibile “terminare un comando con &&
:
echo 1 && echo 2
Qui, hai bisogno della barra rovesciata:
echo 1 2 3 \ 4
o
echo 1 \ && echo 2
Altrimenti, bash eseguirà il comando subito dopo lelaborazione della prima riga senza attendere la riga successiva.
Commenti
- Quindi " continuation " è il termine che stavo cercando. Il manuale di Bash lo spiega nella sezione Citazioni, quindi lho trovato … Ora, hai detto che si può ' t termina una riga con
&&
e restituiscePS2
prompt. Quali sono alcuni degli altri casi ? Cè un elenco da qualche parte nel manuale di bash?
Risposta
Una delle linee guida sullo stile di scripting I ” che ho incontrato durante la mia vita professionale presso una grande azienda IT, mi ha obbligato a utilizzare no più di 80 caratteri per riga in uno shellscript e rientrano dopo aver interrotto la riga. Inoltre, ho dovuto interrompere la linea prima di una barra verticale o & & o ||. Mi piace:
command1 \ && command2 \ || command3 \ | command4
Lobiettivo era di avere una chiara leggibilità.
Commenti
- Lho fatto anchio, finché qualcuno non ha fatto notare che puoi omettere \ se metti & &, || e | nella riga precedente: leggibilità ancora migliore.
- @ole yup lho capito, ma se cè una linea guida da seguire, il mio codice non ' t passare il controlla se ' lo faccio
- +1. Tendo a usare lo stile menzionato da @OleTange (almeno per comandi lunghi o complicati) – ma lo stile che menzioni ha il chiaro vantaggio che puoi vedere che tipo di continuazione è solo guardando solo la linea stessa, non ' non è necessario guardare anche alla fine della riga precedente. Bello. ' Non sono sicuro che mi piaccia abbastanza da costringermi a cambiare le mie abitudini, ma mi piace.
- Francamente, preferisco inserire
&&
e||
allinizio delle righe. Proprio come ho inseritoOR
eAND
allinizio delle righe nelle mie clausole SQL WHERE. - IMO, cè un enorme vantaggio in termini di coerenza. Se in alcuni casi è NECESSARIO utilizzare
` and in other cases it is optional, I would prefer to use
`ovunque il mio comando continui nella riga successiva. Scansionando uno script puoi facilmente perdere una riga che continua perché finisce con&&
o||
o|
. (E come dice @ErikE, in realtà preferisco avere i miei&&
e||
nella riga successiva).