[Top][All Lists]

[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 <address@hidden> 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
grep test:
declare -- testvar



reply via email to

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