bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: equivalent of Linux readlink -f in pure bash?


From: Clark J. Wang
Subject: Re: equivalent of Linux readlink -f in pure bash?
Date: Tue, 10 Jan 2012 15:55:19 +0800

On Wed, Aug 10, 2011 at 18:47, Stephane CHAZELAS <stephane_chazelas@yahoo.fr
> wrote:

> 2011-08-10, 12:00(+02), Bernd Eggink:
> [...]
> > function f
> > {
> >      local OPTIND=1
> >
> >      echo "\$1=$1"
> > }
> >
> > while getopts "abcdefg" opt
> > do
> >      echo "opt=$opt"
> >      f $opt
> > done
> > --------------------------------
> >
> > Calling the sript like this works fine:
> >       script -a -b -c
> >
> > But calling it like this leads to an endless loop:
> >       script -abc
> [...]
> > However, this also loops endlessly. The reason is most likely that bash
> > maintains an additional internal variable holding the index of the
> > current character, relative to the current word. While this variable is
> > not directly accessible by the user, it is set to 0 whenever OPTIND is
> > assigned a value.
> [...]
>
> That would be a bug in bash in my opinion. If OPTIND is marked
> local to the function, it shouldn't affect the behavior of
> parent contexts.
>
> Note that that bug is also in ksh93, pdksh, mksh and posh
> (though slightly different in that one), but not in ash nor zsh.
>

Seems like ksh93 (tested with version 93u 2011-02-08) implicitly declares
OPTIND and OPTARG in functions defined in the `function NAME {}' syntax and
everything works fine. But if OPTIND or OPTARG are explicitly declared as
local it may not work as expected.

Wish Chet would consider fixing this problem in future bash releases. :)


> Note that if you set OPTIND local, you probably want to do the
> same for OPTARG (and maybe OPTERR).
>
> --
> Stephane
>
>


reply via email to

[Prev in Thread] Current Thread [Next in Thread]