On Wed, Feb 14, 2001 at 09:28:04PM +0100, Heinrich Götzger <goetzger@xxxxxxx> wrote: > > Hi there again, > > my second problem is that I want to set NAME to WORD, > if NAME is not set, example from zsh.info: > ${NAME:=WORD} Fine :-) > my script (called script.sh): > -- begin -- > if [ ${NAME:=`hostname | cut -c5-8`} ] > then > echo $NAME > fi > > if [ ${NAME1:=""} = "true" ] > then > echo "true" > fi > -- end -- > asuming, my hosts name is exploding: > > $ echo $NAME > zsh: NAME: parameter not set > $ echo $NAME1 > zsh: NAME1: parameter not set > $ . script.sh > odin > script.sh:6: parse error: condition expected: = Of course :-) > Again, it runs with bash and ksh. > > Why does it not expand NAME1 to "" ? It expands NAME1 to an empty string, which I would expect. Why? Let's see: if [ ${NAME1:=""} = "true" ] ; then echo "true" ; fi ^^^^^^^^^^^^ Put value of $NAME1 here. Use empty default. Oops, the shell sees this: if [ = "true" ] ; then echo "true" ; fi > running it with set -x it shows: > $ . script.sh > +-zsh:8> . script.sh > +script.sh:1> [ odin ] > +script.sh:3> echo odin > odin > +script.sh:6> [ = true ] > script.sh:6: parse error: condition expected: = > > Any ideas? Of course :-) Either use [[ ]] like this: if [[ ${NAME1:=""} = "true" ]] ; then echo "true" ; fi Or, if your shell is also supposed to run with bash/ksh, use something like this: if [ "${NAME1:=''}" = "true" ] ; then echo "true" ; fi > Thanks for our help. > > Regards > > Heinrich Ciao, Thomas -- Thomas Köhler Email: jean-luc@xxxxxxxxxxxxxxxxx | LCARS - Linux <>< WWW: http://jeanluc-picard.de | for Computers IRC: jeanluc | on All Real PGP public key available from Homepage! | Starships
Attachment:
pgpLLJyNU6ylh.pgp
Description: PGP signature