Hvad er forskellen mellem enkelt og dobbelt citater i Bash Shell?
Vedhæftning af tekst i citatmærker er ret standard praksis på kommandolinjen, især når man beskæftiger sig med filer, der har mellemrum i navne, men hvordan ved du, om du skal bruge enkelt eller dobbelt citater? Lad os se på forskellen, og når du skal bruge en mod den anden.
Den generelle regel er, at dobbelt citater stadig tillader udvidelse af variabler inden for citaterne, og enkelte citater gør det ikke. Fortsæt læsning.
Citater med simpel tekst
Hvis du simpelthen vedlægger et par ord med tekst, er det virkelig ligegyldigt, hvilken du bruger, da de begge vil arbejde nøjagtigt ens. For eksempel vil disse to kommandoer både oprette en mappe med navnet Test Directory:
mkdir "Test Directory"
mkdir 'Test Directory'
Mere erfarne typer vil sandsynligvis bemærke, at du også kunne bruge mkdir Test \ Directory, hvis du ville have det.
Shell Variabel Udvidelse
Forskellen mellem enkelt og dobbelt citater bliver vigtigere, når du beskæftiger dig med variabler på kommandolinjen - som standard vil bash udvide en variabel som $ test til hele strengen. Først tildeler vi variablen:
test = "Dette er en test"
Nu kan du bruge denne variabel på kommandolinjen, som denne, som bare skal output Dette er en test til konsollen:
ekko $ test
Her er hvor forskellen mellem dobbelt og enkelt citater bliver mere klart. Når du bruger single quotes, vil variablerne ikke blive udvidet. For eksempel, hvis du kører denne kommando:
ekko '$ test'
Du kan kun se '$ test' på kommandolinjen, når du bruger single citater, men det vil blive sendt korrekt, når du bruger dobbelt citater:
Det samme virker, når du bruger tegnet til at udvide en kommando på kommandolinjen. Sig for eksempel at du ville bruge pwd kommando fra en anden kommando-du bruger backticks til at fortælle skalen at udvide den:
ekko 'pwd' / test
Hvis du var i din hjemmemappe, ville du se produktionen, der så så ud:
/ Home / nørd / test
Sig for eksempel, at du er i en mappe, der har et mellemrum i stien, og du vil bruge kommandoen ln til at oprette et symbolsk link til en fil i den aktuelle mappe. Du skal normalt angive den fulde sti, når du bruger kommandoen ln, så det er meget nemmere at bruge 'pwd' for at gemme skrivning.
Se hvad der sker, når du forsøger at bruge kommandoen uden at omslutte citater:
ln -s 'pwd' / test / home / geek / linkedname
I stedet skal du omgive citater:
ln -s "'pwd' / filnavn" / nogle / andre / sti
For et mere konkret eksempel, lad os antage, at vi har en mappestruktur som dette eksempel, hvor alle filnavne har mellemrum i dem:
Da kommandoen Unzip ikke understøtter at bruge * til at køre den mod alle filer, skal du bruge kommandoen for til i stedet. Her er ting, der bliver interessante:
for f i * .zip; do unzip $ f; done
Ups! Det ser ud som om det ikke fungerede.
Hvad vi skal gøre i stedet, er at bruge dobbelt citater omkring variabel $ f, som denne:
for f i * .zip; udpak "$ f"; færdig
Nu hver gang kommandoen går igennem løkken, vil den faktisk køre en kommando som denne:
unzip "test 1.zip"
Selvfølgelig ville det løbe igennem og køre en lignende kommando for hver fil i mappen.
Lad os gennemgå
Nu hvor vi har gennemgået eksemplerne, vil vi hurtigt gennemgå, hvis du har savnet det:
Dobbelt Citater
- Brug når du vil vedhæfte variabler eller bruge shell ekspansion inden for en streng.
- Alle tegn indenfor er fortolket som almindelige tegn med undtagelse af $ eller 'som vil blive udvidet på skallen.
Enkeltlige Citater
- Alle tegn i enkelte citater tolkes som en strengkarakter.
Og dermed slutter lektionen af citaterne. Brug dem klogt.