Skalsyntax: Hur använder man korrekt \ för att bryta linjer? [duplicera]

<åt sidan class = "s-notice s-notice__info js-post-notice mb16" role = "status">

Denna fråga har redan ett svar här :

Kommentarer

  • Exemplet fungerar för mig; vad får du?
  • @JeffSchaller Tyvärr, jag gjorde det tydligare. Vad jag menar är att \ behövs för vissa saker men inte för andra. Jag vill bara veta hur den används korrekt. Och av någon udda anledning \ kan inte markeras av asterisken i kommentarer
  • \ är en uttrycklig fortsättning; bash ger dig PS2 om kommandot ännu inte är klart. Är det förvirringen?
  • Jag ' Jag är inte säker på att det här är en hel kopia, åtminstone som du frågar i titeln. Även om OP frågar inom ramen för & &, är det fortfarande tillräckligt allmänt att ett mer omfattande svar kan ges som inte är specifikt till det.

Svar

Om påståendet skulle vara korrekt utan fortsättning måste du använda \. Följande fungerar därför utan bakåtvänd snedstreck eftersom du inte kan avsluta ett kommando med en &&:

echo 1 && echo 2 

Här behöver du backslash:

echo 1 2 3 \ 4 

eller

echo 1 \ && echo 2 

Annars, bash skulle utföra kommandot direkt efter bearbetning av första raden utan att vänta på nästa.

Kommentarer

  • Så " fortsättning " är termen jag letade efter. Bash-manualen förklarar det i offertavsnittet, så jag hittade det … Nu sa du att man kan ' t avslutar en rad med && och det ger PS2 prompt. Vilka är några av de andra fallen ? Finns det någon lista någonstans i bash-manualen?

Svar

En av riktlinjerna för skriptstil I ” har stött på under mitt yrkesliv på ett stort IT-företag, tvingade mig att använda nr längre än 80 tecken per rad i ett shellscript och indrag efter att ha brutit linjen. Jag var också tvungen att bryta linjen före ett rör eller & & eller ||. Gilla:

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

Målet var att ha en tydlig läsbarhet.

Kommentarer

  • Jag gjorde det också tills någon påpekade att du kan utelämna \ om du lägger till & &, || och | på föregående rad: Ännu bättre läsbarhet.
  • @ole yup jag fick det, men om det finns en riktlinje att följa, skulle min kod ' inte klara granska om jag ' gör det
  • +1. Jag brukar använda den stil som nämns av @OleTange (åtminstone för långa eller komplicerade kommandon) – men den stil du nämner har den tydliga fördelen att du kan se vilken typ av fortsättning det är genom att bara titta på själva raden, du don ' t måste också titta på slutet av föregående rad. Trevlig. Jag ' är inte säker på om jag gillar det tillräckligt för att tvinga mig själv att ändra mina vanor, men jag gillar det.
  • Uppriktigt sagt föredrar jag att sätta && och || i början av raderna. Precis som jag satte OR och AND i början av rader i min SQL WHERE-klausuler.
  • IMO, konsistensen är stor. Om du i vissa fall MÅSTE använda ` and in other cases it is optional, I would prefer to use `överallt där mitt kommando fortsätter på nästa rad. Genom att skanna ett skript kan du enkelt missa att en rad fortsätter eftersom den slutar med && eller || eller |. (Och som @ErikE säger, föredrar jag faktiskt att ha min && och || på nästa rad).

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *