If-Koubou

Kāda ir atšķirība starp vienreizējām un dubultajām cenām Bash apvalkā?

Kāda ir atšķirība starp vienreizējām un dubultajām cenām Bash apvalkā? (Kā)

Teksta pievienošana pēdiņās ir diezgan ierasta prakse komandrindā, it īpaši, runājot ar failiem, kuru nosaukumos ir atstarpes, bet kā jūs zināt, vai izmantot vienotu vai divkāršu pēdiņām? Apskatīsim atšķirību, un kad vajadzēs lietot vienu pret otru.

Vispārīgais noteikums ir tāds, ka divkāršās kotācijas joprojām atļauj mainīgo lielumu paplašināšanu pēdiņās, un atsevišķas kotācijas nav. Turpiniet lasīt.

Citāti ar vienkāršu tekstu

Ja jūs vienkārši pievienojat dažus teksta vārdus, patiešām nav nozīmes tam, ko jūs izmantojat, jo viņi abi strādā vienādi. Piemēram, šīs divas komandas izveidos direktoriju ar nosaukumu Test Directory:

mkdir "Testa direktorijs"
mkdir "Testu katalogs"

Iespējams, ka pieredzējušākie veidi domā, ka jūs varētu arī izmantot mkdir Test \ Directory, ja vēlaties.

Shell mainīgo paplašināšana

Atšķirība starp viena un divām kotētām kļūst svarīgāka, ja runājat ar mainīgajiem lielumiem pēc komandrindas pēc noklusējuma, bash gatavojas paplašināt mainīgo, piemēram, $ testu, uz pilnu virkni. Vispirms mēs piešķirsim mainīgo:

tests = "Tas ir tests"

Tagad jūs varat izmantot šo mainīgo komandrindā, piemēram, šo, kas vienkārši jāizdod Šis ir tests uz konsoli:

echo $ tests

Šeit ir redzama vieta, kur atšķirība starp divām un vienvietīgām kotācijām kļūst skaidrāka - ja jūs izmantojat vienotās cenas, mainīgie vairs netiks paplašināti. Piemēram, ja palaižat šo komandu:

echo "$ tests"

Kad izmantojat vienotās cenas, komandu rindā nekas netiks rādīts kā '$ test', bet, ja izmantosiet divkāršās pēdiņas, tas tiks pareizi parādīts:

Tas pats notiek, ja jūs izmantojat rakstzīmi komandrindas komandas paplašināšanai. Piemēram, teiksim, ka vēlējāties izmantot pwd komanda no citas komandas, jūs varētu izmantot aizmugurē, lai pastāstītu čaumalam, lai to paplašinātu:

echo "pwd" / tests

Ja jūs atradāt mājas mapē, jūs redzētu izvadu, kas izskatījās šādi:

/ home / geek / tests

Piemēram, tev ir mape, kurā ir vieta ceļā, un jūs vēlaties izmantot komandu ln, lai izveidotu simbolisku saiti uz failu pašreizējā direktorijā. Lietojot ln komandu, parasti ir jāprecizē pilnais ceļš, tāpēc ir daudz vieglāk izmantot "pwd", lai saglabātu rakstīšanu.

Paskaties, kas notiek, mēģinot un izmantot komandu, neiekļaujot citātus:

ln -s 'pwd' / tests / home / geek / linkedname

Tā vietā jums būs jāiekļauj pēdiņas:

ln -s "" pwd "/ filename" / some / other / path

Lai iegūtu konkrētāku piemēru, pieņemsim, ka mums šajā mapē ir mapju struktūra, kurā visiem faila nosaukumiem ir atstarpes:

Tā kā komanda unzip neatbalsta, izmantojot *, lai palaistu to pret visiem failiem, jums tā vietā jāizmanto komanda. Šeit ir interesantas lietas:

par f in * .zip; do unzip $ f; darīts

Hmm ... Izskatās, ka tas nedarbojās.

Tās vietā, kas mums būs jādara, ir jāizmanto dubultās kotācijas ap $ f mainīgo, piemēram, šo:

par f in * .zip; veiciet unzip "$ f"; izdarīt

Tagad katru reizi, kad komanda izpilda cilpu, tā patiešām izpildīs komandu kā šis:

unzip "tests 1.zip"

Protams, tas izveidotu cilpu un palaistu līdzīgu komandu katram mapes failam.

Apskatīsim

Tagad, kad mēs esam izgājuši piemērus, mēs vienkārši ātri pārskatīsim, ja jūs to pazaudējāt:

Dubultās cenas

  • Izmantojiet, ja vēlaties pievienot mainīgos lielumus vai izmantot virknes apvalku.
  • Visas rakstzīmes tiek interpretētas kā parastās rakstzīmes, izņemot $ vai ", kas tiks paplašināts uz čaulas.

Vieni centieni

  • Visas rakstzīmes vienotās pēdiņas tiek interpretētas kā virknes rakstzīmes.

Un tādējādi beidzas citātu mācība. Izmantojiet tos saprātīgi.