Shell-syntaxis: hoe correct \ te gebruiken om regels te breken? [duplicate]

Deze vraag heeft hier al een antwoord :

Reacties

  • Het voorbeeld werkt voor mij; wat krijg je?
  • @JeffSchaller Sorry, ik heb het duidelijker gemaakt. Wat ik bedoel is dat \ nodig is voor sommige dingen, maar niet voor andere. Ik wil gewoon het juiste gebruik ervan weten. En om de een of andere vreemde reden kan \ niet worden gemarkeerd door de asterisc in opmerkingen.
  • \ is een expliciete voortzetting; bash geeft je PS2 als het commando nog niet compleet is. Is dat de verwarring?
  • Ik ' ben er niet zeker van dat dit een behoorlijk duplicaat is, althans zoals gevraagd in de titel. Hoewel het OP vraagt in de context van de & &, is het nog steeds algemeen genoeg om een uitgebreider antwoord te geven dat niet specifiek is aan dat.

Answer

Als de verklaring correct zou zijn zonder voortzetting, moet u \. Daarom werkt het volgende zonder backslash, aangezien je “een commando niet kunt beëindigen met een &&:

echo 1 && echo 2 

Hier heb je de backslash nodig:

echo 1 2 3 \ 4 

of

echo 1 \ && echo 2 

Anders bash zou het commando uitvoeren direct na het verwerken van de eerste regel zonder te wachten op de volgende.

Opmerkingen

  • Dus " vervolg " is de term waarnaar ik op zoek was. De Bash-handleiding legt dat uit in het gedeelte Citeren, dus ik vond dat … Nu, je zei dat je ' een regel eindigen met && en het geeft PS2 prompt. Wat zijn enkele van de andere gevallen ? Staat er ergens in de bash-handleiding een lijst?

Antwoord

Een van de richtlijnen voor scriptstijlen I ” ben tegengekomen tijdens mijn professionele leven bij een enorm IT-bedrijf, verplichtte me om nee te gebruiken langer dan 80 tekens per regel in een shellscript en inspringen na het breken van de regel. Ook moest ik een regel breken voor een pijp of & & of ||. Zoals:

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

Het doel was om een duidelijke leesbaarheid te hebben.

Reacties

  • Ik deed dat ook, totdat iemand erop wees dat je de \ kunt weglaten als je de & & plaatst, || , en | op de vorige regel: nog beter leesbaar.
  • @ole ja, dat heb ik begrepen, maar als er een richtlijn is die moet worden gevolgd, zou mijn code ' de controleer of ik ' dat zou doen
  • +1. Ik gebruik de stijl die wordt genoemd door @OleTange (in ieder geval voor lange of gecompliceerde opdrachten) – maar de stijl die je noemt, heeft het duidelijke voordeel dat je kunt zien wat voor soort vervolg het is door alleen naar de regel zelf te kijken. ' ik hoef ook niet naar het einde van de vorige regel te kijken. Leuk. Ik ' weet niet zeker of ik het leuk genoeg vind om mezelf te dwingen mijn gewoonten te veranderen, maar ik vind het leuk.
  • Eerlijk gezegd geef ik er de voorkeur aan de && en || aan het begin van regels. Net zoals ik de OR en AND aan het begin van regels in mijn SQL WHERE-clausules heb gezet.
  • IMO, er is een enorm voordeel in consistentie. Als je in sommige gevallen ` and in other cases it is optional, I would prefer to use `overal kunt gebruiken waar mijn commando verder gaat op de volgende regel. Als u een script scant, kunt u gemakkelijk missen dat een regel wordt voortgezet omdat deze eindigt op && of || of |. (En zoals @ErikE zegt, ik heb eigenlijk liever mijn && en || op de volgende regel).

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *