Shell-syntaks: Hvordan bruger man korrekt \ til at bryde linjer? [duplikat]

Dette spørgsmål har allerede et svar her :

Kommentarer

  • Eksemplet fungerer for mig; hvad får du?
  • @JeffSchaller Beklager, jeg gjorde det klarere. Hvad jeg mener er, at \ er nødvendigt for nogle ting, men ikke for andre. Jeg vil bare vide, hvordan det bruges korrekt. Og af en eller anden underlig årsag \ kan ikke fremhæves af stjernen i kommentarer
  • \ er en eksplicit fortsættelse; bash giver dig PS2, hvis kommandoen endnu ikke er fuldført. Er det forvirringen?
  • Jeg ' er ikke sikker på, at dette er en hel kopi, i det mindste som bedt om i titlen. Selvom OP spørger i sammenhæng med & &, er det stadig generelt nok til at der kan gives et mere omfattende svar, der ikke er specifikt til det.

Svar

Hvis udsagnet ville være korrekt uden fortsættelse, skal du bruge \. Derfor fungerer følgende uden tilbageslag, da du ikke kan afslutte en kommando med en &&:

echo 1 && echo 2 

Her har du brug for tilbageslag:

echo 1 2 3 \ 4 

eller

echo 1 \ && echo 2 

Ellers bash ville udføre kommandoen lige efter at have behandlet den første linje uden at vente på den næste.

Kommentarer

  • Så " fortsættelse " er det udtryk, jeg ledte efter. Bash manual forklarer det i afsnittet om tilbud, så jeg fandt det … Nu sagde du, at man kan ' t slutter en linje med &&, og det giver PS2 prompt. Hvad er nogle af de andre sager ? Er der en liste et eller andet sted i bash-manualen?

Svar

En af retningslinjerne for scriptstilen I ” har stødt på i mit professionelle liv i et stort it-firma, tvang mig til at bruge nr længere end 80 tegn pr. linje i et shellscript og indrykning efter at have brudt linjen. Jeg måtte også bryde linjen før et rør eller & & eller ||. Ligesom:

command1 \ && command2 \ || command3 \ | command4 

Målet var at have en klar læsbarhed.

Kommentarer

  • Jeg gjorde det også, indtil nogen påpegede, at du kan udelade \ hvis du lægger & &, || og | på den forrige linje: Endnu bedre læsbarhed.
  • @ole yup Jeg fik det, men hvis der er en retningslinje at følge, ville min kode ikke ' ikke passere gennemgå, hvis jeg ' d gør det
  • +1. Jeg har en tendens til at bruge den stil, der er nævnt af @OleTange (i det mindste for lange eller komplicerede kommandoer) – men den stil, du nævner, har den klare fordel, at du kan se, hvilken slags fortsættelse det er bare ved kun at se på selve linjen, du don ' t skal også se i slutningen af den forrige linje. Pæn. Jeg ' er ikke sikker på, om jeg kan lide det nok til at tvinge mig selv til at ændre mine vaner, men jeg kan godt lide det.
  • Helt ærligt foretrækker jeg at sætte && og || i begyndelsen af linjer. Ligesom jeg satte OR og AND i begyndelsen af linjer i mine SQL WHERE-klausuler.
  • IMO, der er stor fordel ved konsistens. Hvis du i nogle tilfælde SKAL bruge ` and in other cases it is optional, I would prefer to use `overalt, hvor min kommando fortsætter på den næste linje. Ved at scanne et script kan du let gå glip af, at en linje fortsættes, fordi den slutter med && eller || eller |. (Og som @ErikE siger, foretrækker jeg faktisk at have min && og || på næste linje).

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *