Sintassi della shell: come utilizzare correttamente \ per interrompere le righe? [duplicate]

Questa domanda ha già una risposta qui :

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 restituisce PS2 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 inserito OR e AND 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).

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *