POSIX vs. bashism? ($VAR vs. ${VAR})

Jan-Benedict Glaw jbglaw at lug-owl.de
Wed Jul 7 15:33:33 CEST 2004


On Wed, 2004-07-07 14:52:19 +0200, Maximilian Wilhelm <max at rfc2324.org>
wrote in message <20040707125218.GC547 at rfc3514.org>:
> Folgender Kommentar zu ner CVS-Aenderung von mir uebersteig mein Wissen,
> kann einer der Experten fuer Erleuchtung sorgen? :-)
> 
> | >   -if [ -z "$MSG" ] ; then
> | >   +if [ -z "${MSG}" ] ; then
> | 
> | This change do not match the commit log.  Do you know if this notation
> | is POSIX compliant?  I use "$VAR" instead of "${VAR}" because I
> | believe the former is POSIX while the latter is a bashism.  Do you
> | know if I am right?

Zumindest ist es SuSv3-compliant. In der Schreibweise $MSG versucht
die Shell, den Variablen-Bezeichner möglichst lang zu wählen:

jbglaw at min:~$ M=h
jbglaw at min:~$ ME=i
jbglaw at min:~$ MES=j
jbglaw at min:~$ echo $MES
j

Allersings hätte ich zurecht auch die Ausgabe "hES" oder "iS" erwarten
dürfen (wird aber nicht ausgegeben, da die Länge zählt:)

Wenn man ganz deutlich machen will, was man denn haben mag, dann kann
man die geschweiften Klammern benutzen; normalerweise werden die zwar
eingesetzt, um Ausdrücke auf Variablen anzuwenden (Stückweises ersetzen,
löschen, ...), aber eben auch, ohne eine echte "aktive" Ersetzung
zu machen:

jbglaw at min:~$ echo ${ME}S
iS

Im Fall da oben ist das also gleichwertig; es erhöht aber IMHO die
Lesbarkeit an einigen Stellen, wenn mit vielen einzelnen Variablen
hintereinander gearbeitet wird.

MfG, JBG

-- 
   Jan-Benedict Glaw       jbglaw at lug-owl.de    . +49-172-7608481
   "Eine Freie Meinung in  einem Freien Kopf    | Gegen Zensur | Gegen Krieg
    fuer einen Freien Staat voll Freier Bürger" | im Internet! |   im Irak!
   ret = do_actions((curr | FREE_SPEECH) & ~(NEW_COPYRIGHT_LAW | DRM | TCPA));
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://lug-owl.de/pipermail/linux/attachments/20040707/32c093e1/attachment.sig>


More information about the Linux mailing list