bug-bash
[Top][All Lists]
Advanced

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

Re: Race in bash-4.3 'typeset'?


From: Stuart Shelton
Subject: Re: Race in bash-4.3 'typeset'?
Date: Tue, 25 Oct 2016 17:19:06 +0100

> On 25 Oct 2016, at 05:40, Martijn Dekker <martijn@inlv.org> wrote:
> 
> Op 25-10-16 om 00:42 schreef Stuart Shelton:
>> Failing this, is there any alternative to ‘typeset’ to list a
>> variable declared as local to a function but which has not yet been
>> assigned a value?
> 
> Try simply testing the exit status of 'typeset -p' or 'declare -p'. If
> the variable is not declared, it exits unsuccessfully.
> 
>    if typeset -p "$var" >/dev/null 2>&1 && [[ ! -v $var ]]
>    then ...
> 
> As far as I can tell, this is not documented in 'help' or in the info
> page, by the way. Perhaps it should be.
> 
> Also note that, while zsh and yash share this behaviour, ksh93 and
> mksh/pdksh do not. If you want to be compatible with all the shells that
> support 'typeset', you could do:
> 
>    if [ -n "$(typeset -p "$var" 2>/dev/null)" ] &&
>       eval "[ -z \"\${var+s}\" ]"
>    then ...
> 
> which is slower because it uses a subshell.
> 
> HTH,
> 
> - M.
> 

Hi Martijn,

Thanks for the suggestion!

However, it doesn’t appear to be able to detect local variables (is this 
intentional or a bug?):

$ test() {
        local testvar

        echo “typeset test:"
        typeset -p testvar && echo yes || echo no
        echo “grep test:"
        typeset -p | grep testvar
}
$ test
typeset test:
-bash: typeset: testvar: not found
no
grep test:
declare -- testvar
yes

Cheers,

Stuart




reply via email to

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