Keresés

Részletes keresés

tangerine Creative Commons License 2005.12.02 0 0 377
Szerintem csak akkor tölti a baloldalba, ha összeérnek (nincs space).

Előzmény: thuram (375)
thuram Creative Commons License 2005.12.02 0 0 376
Tehát pl

if [a=b] mindig igaz lesz, de az if [a==b] csak akkor ha a egyenlő a b vel.
Előzmény: thuram (375)
thuram Creative Commons License 2005.12.02 0 0 375
az egy darab = az a bal oldalba tölti a jobb oldalt:) , a == pedig megvizsgálja hogy a két oldal egyenlőe ha jól tudom.
Előzmény: tangerine (374)
tangerine Creative Commons License 2005.12.02 0 0 374
Ja még azt valaki elmondhatná, hogy miért kell két db egyenlőség jel?
Én egyet szoktam (=) vagy (!=), és úgy is jónak tűnt.
Van különbség?
tangerine Creative Commons License 2005.12.02 0 0 373
Köszi mindenkinek a segítséget!!!!

Kipóbálgattam, hogy melyik a gyorsabb 10000 db-bal egy régi, (P1-es?) gépen.

- Tényleg a 2-es a leggyorsabb.
- Tényleg az én verzióm a leglassabb :-O

7-8x lassabb, a többi nagyjából egyforma.
Bár a 8,3 és a 11,6 között is van majdnem 50%, de még ez is elenyésző az enyémhez képest.

Én mindig ezeket a fajtákat használtam (csak eddig nem kellett a negáltja :)).
Asszem ideje átírnom a szkriptjeimet. :)

#1
if ! { [[ "$allat" == 'kutya' ]] || [[ "$allat" == 'macska' ]] || [[ "$allat" == 'eger' ]]; }; then x=x ; fi # itt még nem olvastam a kettőspontról :)
real 0m10.152s
user 0m10.140s
sys 0m0.010s

#2
if ! [[ "$allat" == 'kutya' || "$allat" == 'macska' || "$allat" == 'eger' ]]; then x=x ; fi # a többi is x=x, hogy akkor már legyen mind egyforma
real 0m8.300s
user 0m8.240s
sys 0m0.070s

#3
if ! [ "$allat" == 'kutya' -o "$allat" == 'macska' -o "$allat" == 'eger' ] ; then x=x ; fi
real 0m10.314s
user 0m10.280s
sys 0m0.040s

#4
if ! ([[ $allat == kutya ]] || [[ $allat == macska ]] || [[ $allat == eger ]]); then x=x ; fi
real 1m7.919s
user 0m19.610s
sys 0m48.220s

#5
if [ ! ( "$allat" = "kutya" -o "$allat" = "macska" -o "$allat" = "eger" ) ]; then x=x ; fi
real 0m11.628s
user 0m11.540s
sys 0m0.090s


Köszi mégegyszer mindenkinek!
tangerine Creative Commons License 2005.12.02 0 0 372
Köszi! Jó tudni, hogy van ilyen is. Eddig mindig ilyen "kamu" parancsokat írtam, x=x vagy until [ 1 = 2 ]

:)
Előzmény: locsemege (369)
tangerine Creative Commons License 2005.12.02 0 0 371
Köszi, rögtön próbálom!
locsemege Creative Commons License 2005.12.02 0 0 370
Azért én is bakiztam. :( Az a végtelen ciklus így jobb lesz:

while :; do echo 'Hello!'; done
Előzmény: locsemege (369)
locsemege Creative Commons License 2005.12.02 0 0 369
Az

if negált_feltétel; then
x=x
else
amit_akarsz
fi

Helyett inkább:

if negált_feltétel; then
:
else
amit_akarsz
fi

Az értékadás felesleges. Tudom, hogy szintaktikai okokból tetted oda, de van semmit nem tevő üres utasítás, ez pedig a kettőspont (:), melynek visszatérési értéke true, azaz 0. Egy végtelen ciklus ezek alapján:

while :; do echo Hello!; done
Előzmény: tangerine (356)
locsemege Creative Commons License 2005.12.02 0 0 368
Ja, igen, és ez is egy újabb változat. Azt hiszem, kedvére válogathat a kérdező!
Előzmény: NevemTeve (366)
locsemege Creative Commons License 2005.12.02 0 0 367
Kicsit érdekesen csináltad. Leírok néhány lehetséges megoldást:

if ! { [[ "$allat" == 'kutya' ]] || [[ "$allat" == 'macska' ]] || [[ "$allat" == 'eger' ]]; }; then

if ! [[ "$allat" == 'kutya' || "$allat" == 'macska' || "$allat" == 'eger' ]]; then

if ! [ "$allat" == 'kutya' -o "$allat" == 'macska' -o "$allat" == 'eger' ]; then

A macskakörmök (") illetve aposztrofok (') akkor kellenek, ha fenn áll az esély arra, hogy a string szóközt vagy tabulátort fog tartalmazni, illetve a bash számára speciális karaktert. Hibás, bár jónak látszik:

if [ $a < 5 ]; then

Azért, mert a < a standard input átirányítása, és a [ egy parancs (test), nem pedig egy operátor. A < 5 ] pedig egy-egy paramétere lenne, ha a < literális lenne. Helyesen:

if [ $a \< 5 ]; then

Illetve

if [[ $a < 5 ]]; then

vagy

if (( a < 5 )); then

Amit írtál, hogy subshell-ben futtatod, az is majdnem jó volt, csak a szóközök maradtak le:

if ! ([[ $allat == kutya ]] || [[ $allat == macska ]] || [[ $allat == eger ]]); then

Ebben a helyzetben a zárójel nem azt jelenti, mint a matematikában, hanem a bezárójelezett rész egy önálló process-ben fog futni, így lassabb lesz. Én a második javaslatomat ajánlom.
Előzmény: tangerine (356)
NevemTeve Creative Commons License 2005.12.02 0 0 366
Ez valami vallási dolog? Becsszó ugyanaz a kettő... egyébként így lehet:

if [ ! \( "$allat" = "kutya" -o "$allat" = "macska" -o "$allat" = "eger" \) ]; then

vagyis a zárójeleket meg kell védeni a shell-től.
Előzmény: tangerine (365)
tangerine Creative Commons License 2005.12.02 0 0 365
a tied:

not(a) and not(b) and not(b)

én meg ezt keresem

not (a or b or c)

Az igaz, hogy az eredmény u.a.
tangerine Creative Commons License 2005.12.02 0 0 364
Jó azt tudom, de én OR-okkal szeretném, és az egészet tagadni. Vagy úgy nem lehet?
Előzmény: NevemTeve (363)
NevemTeve Creative Commons License 2005.12.02 0 0 363
Micsoda véletlen, az első negáltja a második;)
Előzmény: tangerine (362)
tangerine Creative Commons License 2005.12.02 0 0 362
Az első negáltját
Előzmény: NevemTeve (360)
tangerine Creative Commons License 2005.12.02 0 0 361
A logikájával tisztában vagyok (nagyjából) csak a szintaktikájával nem.
Nem tudom, hogy hogyan kéne leírni úgy, hogy megegye a unix.
És ne ilyeneket írjon, hogy: '(' not expected, vagy '![[' not found
Előzmény: locsemege (359)
NevemTeve Creative Commons License 2005.12.02 0 0 360
Végül is mit szeretnél?
Ezt:

if [ "$1" = "kutya" -o "$1" = "macska" -o "$1" = "eger" ]; then

vagy ezt:

if [ "$1" != "kutya" -a "$1" != "macska" -a "$1" != "eger" ]; then
locsemege Creative Commons License 2005.12.02 0 0 359
De Morgan tétele? :)
Előzmény: tangerine (357)
tangerine Creative Commons License 2005.12.02 0 0 358
Esetleg még egy "IN"-es megoldás is jó lenne:

if ! $allat in [ kutya, macska, eger] ; then
exit 1
if

Egyszerűen nem igazodok ki a man-ban.
tangerine Creative Commons License 2005.12.02 0 0 357
Persze van még egy működő megoldás is, de az is kissé nyakatekert.

if [[ $allat != kutya ]] && [[ $allat != macska]] && [[ $allat != eger ]] ; then
exit 1
fi
Előzmény: tangerine (356)
tangerine Creative Commons License 2005.12.02 0 0 356
Nem tudok rájönni, hogy hogy lehet ezt bezárójelezve tagadni.
Persze így működik, de nem túl elegáncsos megoldás.

if [[ $allat = kutya ]] || [[ $allat = macska]] || [[ $allat = eger ]] ; then
x=x
else
exit 1
fi

Na most én ezt fordítva szeretném. Probálkoztam mindenfélével de nem jött össze.
Pl:


if !( [[ $allat = kutya ]] || [[ $allat = macska]] || [[ $allat = eger ]]) ; then
exit 1
fi

Tudna valaki segíteni?
kaktusztea Creative Commons License 2005.07.30 0 0 355
Nem. Így.
K3B_URL=`grep k3b $TEMPFILE_2 |grep "tar\.gz" | awk -F\" '{print $2}'`

(kész kabaré :)
kaktusztea Creative Commons License 2005.07.30 0 0 354
Ehh, leszedte a fórum a backslash-eket. Így a jó:
K3B_URL=`grep k3b $TEMPFILE_2 |grep "tar.gz" | awk -F" '{print $2}'`
Előzmény: kaktusztea (353)
kaktusztea Creative Commons License 2005.07.30 0 0 353
Illetve ez lett a végleges sor:
K3B_URL=`grep k3b $TEMPFILE_2 |grep "tar.gz" | awk -F" '{print $2}'`
kaktusztea Creative Commons License 2005.07.30 0 0 352

DISTROWATCHos_VERZIO=`grep tar.gz $TEMPFILE_2 | awk -F> '{print $2}' | awk -F< '{print $1}' `


Nekem működött az első is, amit írtál.
Előzmény: Wyfliff (349)
Wyfliff Creative Commons License 2005.07.30 0 0 351
meg en sem, de most inkabb megnezek egy filmet, hatha attol ihletet kapok :)
Jo probalkozast ...
kaktusztea Creative Commons License 2005.07.30 0 0 350
Köszönöm!!
Már csak azt nem tudom, hogyan hasonlítsam össze a verziószámokat..
Előzmény: Wyfliff (348)
Wyfliff Creative Commons License 2005.07.30 0 0 349
DISTROWATCHos_VERZIO=`grep tar.gz $TEMPFILE_2 | awk -F\> '{print $2}' | awk -F\< '{print $1}' `
Remelem a backslash-ek a helyukon maradnak....
Biztos van ennel elegansabb megoldas is, kis szerencsevel azt is megtudhatjuk :)
Wyfliff Creative Commons License 2005.07.30 0 0 348
K3B_URL=`grep tar.gz $TEMPFILE_2 | awk -F\" '{print $2}'`
Előzmény: kaktusztea (347)

Ha kedveled azért, ha nem azért nyomj egy lájkot a Fórumért!