# if true ; then ; fi
-sh: syntax error near unexpected token `;'
Rajtam kívül mindenki tudta, hogy a then és a fi között muszáj valaminek lennie, különben syntax error lesz? :)
Most ezért nem futott egy ideje egy cron job, mert kikommenteltem az egyetlen parancsot a then és a fi között, mert már nem kellett, de mégse akartam az egészet if-et kitörölni...
- 2558 megtekintés
Hozzászólások
kell bizony :)
sokak a `:` "parancsot" szokták placeholdernek használni, de látom te már ismered a `true` áldásait - én is azt alkalmazom placeholdernek.
~~~~~~~~
deb http://deb.uucp.hu/ wheezy yazzy repack
- A hozzászóláshoz be kell jelentkezni
Én is a ':'-ot használom. A 'true' mitől igazabb a kettőspontnál? :)
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
sokszor láttam okosokat, akik a : -t felüldefiniálják. de miért... előző bash-ekben nem volt benne ez a builtin parancs? azt mondanám különböző shell-ek között hordozhatóbb a true.
~~~~~~~~
deb http://deb.uucp.hu/ wheezy yazzy repack
- A hozzászóláshoz be kell jelentkezni
alias true='! :'
if true; then echo igaz; else echo hamis; fi
hamis
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Hát maga a "then fi" 2 hibát is tartalmaz. Ebből az egyik, hogy a fi az "parancs", tehát újsor, vagy ; vagy egyéb utasításlezáró mögé írandó. És csak a második hiba, hogy a then és a fi parancsok közé kell egy harmadik parancs. Amúgy ha nem egy sorban van ez az egész, akkor ez a harmadik parancs simán lehet egy megjegyzés is. Azaz ez jó:
if parancs1
then
# parancs2
fi
Ez viszont természetesen nem jó:
if parancs1 ; then # parancs2 ; fi
Nyilván ha az utóbbi (egysorba írt) formát használod, akkor a legkönnyebb az egészet kikommentelni helyette:
# if parancs1 ; then parancs2 ; fi
vagy kicsit trükkösen használni a fent általatok is taglalt : parancsot:
if parancs1 ; then : parancs2 ; fi
(Megjegyzem az utóbbiért egy értelmes gyakvezér/projektvezető kivág a francba, annyira áttekinthetetlen lesz a kód.)
Valamint további megjegyzés, hogy ha egy if-feltétel összesen csak egy egyparancsos then ágat tartalmaz, akkor szerintem sokal olvashatóbb a
parancs1 && parancs2
forma - más kérdés, hogy volt olyan főnököm, aki ezt a rövidített formát kifejezetten ellenjavallotta.
- A hozzászóláshoz be kell jelentkezni
(Mondjuk az első programrész nekem nem ment bash-ban / ksh-ban:
if false; then
# nop
fi
ksh: syntax error: `fi' unexpected
)
- A hozzászóláshoz be kell jelentkezni
Nem "if true ; then fi" volt az eredeti kódban, ez csak egy leegyszerűsítés a lényeg miatt.
Az eredetiben nem egy sorban volt az egész. És valóban, "helyesen" így lenne: "if true ; then ; fi".
Így már tényleg csak az a hiba, ami miatt eredetileg írtam.
Az eredeti kódban pont, hogy egy komment volt a then és a fi között. Írtam is, hogy kikommenteltem azt az egy sort, ami ott volt. Tehát abban viszont nincs igazad, hogy elég egy megjegyzés a then és a fi közé:
$ if true
> then
> # fsdfsdfs
> fi
bash: szintaktikai hiba „fi” váratlan token közelében
- A hozzászóláshoz be kell jelentkezni
Igazatok van, megzavart, hogy a FreeBSD-ben levő sh elfogadja a csak kommentet tartalmazó if-then-fi formát is (és valószínűleg régebbi sh-k is, mert valahol csak megtanultam), és nem ellenőriztem le a többit.
- A hozzászóláshoz be kell jelentkezni