Kezdőlap › Fórumok › Programozás › Bash script
- This topic has 437 hozzászólás, 56 résztvevő, and was last updated 13 years, 6 months telt el by
Goosfrabaa.
-
SzerzőBejegyzés
-
2006-10-03-17:51 #2053259
Azt akarod mondani, hogy ezt:
Code:$(echo „tail -5 /etc/inittab | head”)illetve minden idézőjeles kifejezést a shell igy:
Code:$(echo „tail” „-n5” „/etc/inittab” „|” „head”)értelmez?
Illetve mi a helyzet a ‘ és `jelekkel?2006-10-03-18:17 #2053260próbáld ki:
touch „;”
ls ; ls (ls enter ls)
ls „;” ls (ls „;” enter ls)Illetve mi a helyzet a ‘ és `jelekkel?
echo „AA=ls”
echo „AA=`ls`”
amixer get Master | grep ‘Limits’ | sed ‘s/(.*)Playback 0 – //’ | sed ‘s/ (.*)//’
echo „‘”‘valami'”‘”
echo „”valami””2006-10-03-18:21 #2053261Idézet a bash man-jából:
Command Substitution
Command substitution allows the output of a command to replace the command name. There are two forms:$(command)
or
`command`Tehát a két zárójel (ill. `-ek) közötti valaminek a standard kimenetét fogja jelenteni. Ebben az esetben a kimenet (mivel egy echo-t hívsz):
Code:tail -5 /etc/inittab | headTehát elvileg azt csinálná, mintha kiadnád a fenti parancsot.
Viszont gyakorlatilag a bash nem fogja a | karaktert értelmezni (márminthogy csövezés kellene, hogy következzen), és marad a tail argumentumlistájában, amiről ő azt hiszi, hogy egy fájl, valamint a head-ről is.2006-10-03-19:02 #2053262Ha jól emlékszem, akkor a ` ` jelek között meg általában idézőjelek („,’) között a bash nem piszkál bele semmibe, még a |-t sem bántja. Ezek alapján mivel a | jelet a bash-nak kellene értelmezni, és nem a tail-nek, mert nem tartozik a tail paramétereibe, viszont nem értelmezi az idézőjelek miatt, ezért inkább odadobja a tailnek paraméterként?
Akkor ezek szerint ezért van az is, hogyCode:$(echo „tail -5 /etc/inittab” | head)igy viszont működik?
2006-10-03-19:23 #2053263Alakul a molekula 🙂
Az, hogy a ` közötti dumát nem piszkálja a bash, nem igaz. Ott parancsbehelyettesítést végez. Próbáld ki:
Code:TESZT=`ls | head -n 1`
echo $TESZTvalamint
Code:ls | head -n 1Gondolom, nálad is megegyezik a két parancs-sorozat kimenete.
A te esetedben az volt a „gáz”, hogy a parancsbehelyettesítés közvetlenül egy parancsot jelentett, nem pedig egy változó-szerűséget.Kettős idézőjel: tessék kitalálni, mikor nyomtatja ki a bash a $TESZT szöveget!
Code:echo $TESZT
echo „$TESZT”
echo ‘$TESZT’Ezeket persze lehetőleg még akkor, amikor a $TESZT létezik (persze más környezeti változóval is műxik).
2006-10-03-19:27 #2053264„touch „;”
ls ; ls (ls enter ls)
ls „;” ls (ls „;” enter ls)”
Ha ezt kipróbáltad, akkor megláttad, hogy mi a különbség a „;” bash szimbólum és a „;” string között…, na a „|” szimbólummal ugyanaz a helyzet.„Ezek alapján mivel a | jelet a bash-nak kellene értelmezni, és nem a tail-nek, mert nem tartozik a tail paramétereibe, viszont nem értelmezi az idézőjelek miatt, ezért inkább odadobja a tailnek paraméterként?”
Dehogynem értelmezi stringként értelmezi, ahogy „akartad”…
Ő tudja, hogy neki mit kell csinálni, csak te nem tudod. Gondolj bele, hogy mi van, ha egy „|” tartalmú file-t akarsz létrehozni?
touch „|”
ls „|”
Nem értelmezheti mindig bash szimbólumként.$(echo „tail -5 /etc/inittab” | head)
Na, most akkor minek a „”, egyátalán?2006-10-03-19:32 #2053265Sőt, ide minek az echo? Bár ezt már kérdeztem.
2006-10-03-19:34 #2053266vizsla wrote:$(echo „tail -5 /etc/inittab” | head)
Na, most akkor minek a „”, egyátalán?Jobb olvashatóság? Csak igazából az nem világos, hogy ez az egész mire jó? Mármint hogy egy echo kimenetéből miért jó parancsot csinálni. Az OK, hogy ha mondjuk egy fájlban van sok sorod, és annak mondjuk a 192. sorát akarod végrehajtani, esetleg. De így?
2006-10-03-19:45 #2053267„Kettős idézőjel: tessék kitalálni, mikor nyomtatja ki a bash a $TESZT szöveget!”
Az utolsónál mert a ‘-ba tényleg nem piszkál bele. A ” esetén úgy tudom további értelmezést is végrehajt.ls „;” ls (ls „;” enter ls)
Itt az a gond, hogy a 2. ls-t is fileként keresi, nem parancsként. De végül logikus.
Viszont ha az idézőjelben levő dolgokat stringnek veszi, akkor mi a helyzet a fent emlitett echo „$TESZT”-tel? Ott a $-t miért nem stringnek veszi? Pontosabban akkor mikor milyen idézőjelben mit vesz stringnek és mit nem? (link is elég ha nem akartok gépelni, gondolom nem egyedül nekem jutott eszembe)
„ez az egész mire jó?”
Ez egy nyomorult feladat, amit az egyetemen kaptunk, hogy mondjuk meg, miért azt adja amit. És több társammal egyetemben halvány gőzünk nem volt róla…2006-10-03-20:02 #2053268„”$TESZT”-tel? Ott a $-t miért nem stringnek veszi?”
„” között mindenből sztring lesz kivéve: ‘$’, ‘`’, és ”/(‘…’), ill a ‘*’ és ‘@’-nek speciális jelentése van.„link is elég ha nem akartok gépelni, gondolom nem egyedül nekem jutott eszembe”
http://www.gnu.org/software/bash/manual/bashref.html -
SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.
legutóbbi hsz