Aký je rozdiel medzi jednorazovými a dvojitými cenami v Bash Shell?
Umiestnenie textu v úvodzovkách je pomerne bežnou praxou na príkazovom riadku, hlavne pri zaobchádzaní so súbormi s medzerami v názvoch, ale ako viete, či sa majú použiť jednoduché alebo dvojité úvodzovky? Poďme sa pozrieť na rozdiel, a keď by ste mali používať jeden proti druhému.
Všeobecným pravidlom je, že dvojitá ukážka stále umožňuje rozšírenie premenných v rámci úvodzoviek a jednoduché úvodzovky neplatí. Prečítajte si.
Citácie s jednoduchým textom
Ak jednoducho priložíte niekoľko slov, skutočne nezáleží na tom, ktorý z nich použijete, pretože obaja budú fungovať úplne rovnako. Napríklad tieto dva príkazy vytvoria adresár s názvom Test Directory:
mkdir "Test Directory"
mkdir 'Test Directory'
Viac skúsených typov pravdepodobne vezmete na vedomie, že môžete tiež použiť mkdir Test \ Directory, ak chcete.
Variabilná expanzia Shell
Rozdiel medzi jednoduchými a dvojitými úvodzovkami sa stáva dôležitejším pri práci s premennými na príkazovom riadku - bash rozbalí premennú ako $ test do plného reťazca. Najprv priradíme premennú:
test = "Toto je test"
Teraz môžete použiť túto premennú na príkazovom riadku, ako je táto, ktorá by mala jednoducho vystupovať Toto je test do konzoly:
echo $ test
Tu je rozdiel medzi dvojitými a jednoduchými úvodzovkami jasnejší - pri použití jednotlivých úvodzoviek sa premenné nebudú rozširovať. Napríklad, ak spustíte tento príkaz:
echo '$ test'
Ak použijete jednoduché úvodzovky, uvidíte na príkazovom riadku len "$ test", ale pri použití dvojitých úvodzoviek sa bude zobrazovať správne:
To isté funguje, keď použijete znak na rozbalenie príkazu na príkazovom riadku. Napríklad, povedzme, že chcete používať pwd príkaz z iného príkazu - použijete záplaty na to, aby sa shell rozbalil:
echo "pwd" / test
Ak ste boli vo svojom domovskom priečinku, zobrazili by ste výstup, ktorý vyzerá takto:
/ Home / poleno / test
Povedzme napríklad, že ste v priečinku s medzerou v ceste a chcete použiť príkaz ln na vytvorenie symbolického odkazu na súbor v aktuálnom adresári. Ak používate príkaz ln, zvyčajne musíte zadať úplnú cestu, takže je oveľa jednoduchšie používať 'pwd' na uloženie písania.
Pozrite sa, čo sa stane, keď sa pokúsite použiť príkaz bez zahrnutia do úvodzoviek:
ln -s 'pwd' / test / doména / geek / linkedname
Namiesto toho budete musieť obklopiť v úvodzovkách:
ln -s "" pwd "/ názov súboru" / some / other / cesta
Pre konkrétnejší príklad predpokladajme, že máme štruktúru priečinkov, ako je tento príklad, kde všetky názvy súborov majú medzery v nich:
Vzhľadom k tomu, že príkaz unzip nepodporuje používanie * na spustenie proti všetkým súborom, budete musieť namiesto toho použiť príkaz for. Tu je zaujímavosť:
pre f v * .zip; rozbaľte $ f; hotovo
Och! Vyzerá to, že to nefunguje.
Čo budeme musieť urobiť, je použitie dvojitých úvodzoviek okolo premennej $ f, napríklad:
pre f v * .zip; rozbaľte "$ f"; hotovo
Teraz zakaždým, keď pre príkaz prejde cez slučku, bude to vlastne spustiť príkaz, ako je tento:
rozbaľte "test 1.zip"
Samozrejme, že bude prechádzať a spustiť podobný príkaz pre každý súbor v adresári.
Pozrime sa
Teraz, keď sme prešli príkladmi, budeme jednoducho skontrolovať, či ste to vynechali:
Dvojité ponuky
- Použite, keď chcete uzavrieť premenné alebo použiť expanzia shell vnútri reťazca.
- Všetky znaky v rámci sú interpretované ako bežné znaky s výnimkou $ alebo ', ktoré budú rozšírené na shell.
Jednotlivé ponuky
- Všetky znaky v jednotlivých úvodzovkách sa interpretujú ako znak reťazca.
A tak končí lekciu citátov. Použite ich múdro.