Vad är skillnaden mellan enkla och dubbla citat i Bash Shell?
Omslutande text i citattecken är ganska vanlig praxis på kommandoraden, speciellt när det handlar om filer som har mellanslag i namnen, men hur vet du om du vill använda enkla eller dubbla citat? Låt oss ta en titt på skillnaden, och när du ska använda en mot den andra.
Den allmänna regeln är att dubbla citat fortfarande tillåter utvidgning av variabler inom citaten, och enskilda citat gör det inte. Fortsätt läsa.
Citat med enkel text
Om du helt enkelt bifogar några ord med text, spelar det ingen roll vad du använder, eftersom de båda kommer att fungera exakt samma. Dessa två kommandon kommer till exempel att skapa en katalog som heter Test Directory:
mkdir "Test Directory"
mkdir "Test Directory"
Mer erfarna typer kommer troligen att notera att du också kan använda mkdir Test \ Directory om du vill.
Shell Variabel Expansion
Skillnaden mellan enkla och dubbla citat blir viktigare när du hanterar variabler på kommandoraden - som standard kommer bash att expandera en variabel som $ test i hela strängen. Först ska vi tilldela variabeln:
test = "Detta är ett test"
Nu kan du använda den här variabeln på kommandoraden, så här, som helt enkelt ska matas ut Detta är ett prov till konsolen:
echo $ test
Här är skillnaden mellan dubbla och enkla citattecken tydligare. När du använder enkla citat kommer variablerna inte att utvidgas. Om du till exempel kör detta kommando:
eko "$ test"
Du ser ingenting annat än "$ test" på kommandoraden när du använder enkla citat, men det kommer att matas ut korrekt när du använder dubbla citat:
Samma sak fungerar när du använder tecknet för att expandera ett kommando på kommandoraden. Säg att du ville använda pwd kommandot från ett annat kommando-du använder backticks för att berätta att skalet ska expandera det:
eko "pwd" / test
Om du var i din hemmapp så skulle du se produktionen som såg ut så här:
/ Home / nörd / prov
Säg att du till exempel är i en mapp som har ett mellanslag i sökvägen och du vill använda kommandot ln för att skapa en symbolisk länk till en fil i den aktuella katalogen. Du behöver vanligtvis ange hela sökvägen när du använder ln-kommandot, så det är mycket lättare att använda "pwd" för att spara skrivning.
Titta vad som händer när du försöker använda kommandot utan att ange citat:
ln -s 'pwd' / test / home / geek / linkedname
Istället måste du omge i citat:
ln -s "pwd" / filnamn "/ some / other / path
För ett mer konkret exempel, låt oss anta att vi har en mappstruktur som det här exemplet, där alla filnamn har mellanslag i dem:
Eftersom kommandot Unzip inte stöder att använda * för att köra det mot alla filer, måste du använda kommandot för istället. Här är saker som blir intressanta:
för f i * .zip; gör unzip $ f; done
hoppsan! Det verkar som om det inte fungerade.
Vad vi behöver göra istället använder dubbla citat runt variabeln $ f, så här:
för f i * .zip; gör unzip "$ f"; gjort
Nu varje gång kommandot går igenom slingan kommer det faktiskt att driva ett kommando som den här:
unzip "test 1.zip"
Självklart skulle det gå igenom och köra ett liknande kommando för varje fil i katalogen.
Låt oss gå igenom
Nu när vi har gått igenom exemplen kommer vi bara att snabbt granska om du missade det:
Dubbla citat
- Använd när du vill bifoga variabler eller använd skalutvidgning inuti en sträng.
- Alla tecken inom tolkas som vanliga tecken förutom $ eller 'som kommer att utvidgas på skalet.
Enkla citat
- Alla tecken inom enkla citat tolkas som en strängtecken.
Och sålunda avslutas lektionen av citaten. Använd dem klokt.