Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.unix.shell > #26910

Re: Variable var names

From Geoff Clare <geoff@clare.See-My-Signature.invalid>
Newsgroups comp.unix.shell
Subject Re: Variable var names
Date 2026-06-12 13:42 +0100
Message-ID <4fbtfm-c51.ln1@ID-313840.user.individual.net> (permalink)
References <n91qs8Fk65fU1@mid.individual.net>

Show all headers | View raw


Frank Winkler wrote:

> I'm playing with the following in an interactive bash as well as in a 
> ksh script:
> 
> $ n=1
> $ x1="  ok  "
> $ x2="  not ok  "
> $ eval echo \$x$n
> ok
> $ eval echo "\$x$n"
> ok
> $ n=2
> $ eval echo "\$x$n"
> not ok
> $
> 
> So the variable var name seems to work but why are the blanks "deleted" 
> here?

After eval interprets:

eval echo "\$x$n"

the command to be executed by the shell (with n=1) is:

echo $x1

In order to quote the argument passed to echo, you need to supply
some quotes that will survive the parsing that eval does:

$ n=1
$ x1="  ok  "
$ eval echo "\"\$x$n\""
  ok  

Here the command to be executed by the shell is:

echo "$x1"

> Just out of curiosity, I tried this:
> 
> $ IFS="" eval echo ".\$x$n."
> .  not ok  .
> $
> 
> To my surprise, it works but why is IFS relevant here?

Hopefully you can see why now, given the extra quotes in my example above.

> And to my even 
> bigger surprise, it looks like everything seems to behave as expected in 
> the bash session but in the ksh script, IFS is not just changed for this 
> single command but globally - so I had to save and restore it to prevent 
> the whole script from exploding.

This is actually required by POSIX.  If you set POSIXLY_CORRECT=1 in
the environment, bash does the same.  (It's required for the "special
built-in utilities", of which eval is one.)

-- 
Geoff Clare <netnews@gclare.org.uk>

Back to comp.unix.shell | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Variable var names Frank Winkler <usenet@f.winkler-ka.de> - 2026-06-12 09:30 +0200
  Re: Variable var names gazelle@shell.xmission.com (Kenny McCormack) - 2026-06-12 09:02 +0000
    Re: Variable var names Frank Winkler <usenet@f.winkler-ka.de> - 2026-06-13 12:29 +0200
      Re: Variable var names gazelle@shell.xmission.com (Kenny McCormack) - 2026-06-13 11:14 +0000
      Re: Variable var names Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2026-06-13 13:15 +0200
  Re: Variable var names ram@zedat.fu-berlin.de (Stefan Ram) - 2026-06-12 11:26 +0000
    Re: Variable var names ram@zedat.fu-berlin.de (Stefan Ram) - 2026-06-12 11:38 +0000
      Re: Variable var names Frank Winkler <usenet@f.winkler-ka.de> - 2026-06-12 14:07 +0200
        Re: Variable var names ram@zedat.fu-berlin.de (Stefan Ram) - 2026-06-12 12:31 +0000
          Re: Variable var names Lawrence D’Oliveiro <ldo@nz.invalid> - 2026-06-13 02:48 +0000
  Re: Variable var names Christian Weisgerber <naddy@mips.inka.de> - 2026-06-12 12:12 +0000
    Re: Variable var names Frank Winkler <usenet@f.winkler-ka.de> - 2026-06-12 15:19 +0200
    Re: Variable var names Lawrence D’Oliveiro <ldo@nz.invalid> - 2026-06-13 02:51 +0000
  Re: Variable var names Geoff Clare <geoff@clare.See-My-Signature.invalid> - 2026-06-12 13:42 +0100
  Re: Variable var names Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2026-06-12 17:41 +0200
    Re: Variable var names Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2026-06-12 17:54 +0200
    Re: Variable var names Frank Winkler <usenet@f.winkler-ka.de> - 2026-06-13 12:32 +0200
      Re: Variable var names Lawrence D’Oliveiro <ldo@nz.invalid> - 2026-06-14 01:12 +0000
  Re: Variable var names Lawrence D’Oliveiro <ldo@nz.invalid> - 2026-06-13 00:20 +0000
  Re: Variable var names Kaz Kylheku <046-301-5902@kylheku.com> - 2026-06-23 21:25 +0000
    Re: Variable var names Helmut Waitzmann <nn.throttle@erine.email> - 2026-06-24 10:45 +0200
    Re: Variable var names Christian Weisgerber <naddy@mips.inka.de> - 2026-06-24 11:41 +0000

csiph-web