with -e, -u, and -o pipefail all on, should a reference to an unset variable 
inside a read inside a while cause the whole script to exit?

it does if it happens inside a function, but not in "open code", i.e. at the 
top level of the script.

is this intended?

$ cat ./fail
#!/usr/bin/env ksh
set -e
set -u

print ${.sh.version}

print '--- open code'
unset files
typeset -a files

set -o pipefail
ls | while read file
do
    files[${#files[*]}]=$fil
done
set +o pipefail

print files:
typeset -p files
print '---'

print '--- with a function'
function foo
{
    set -e
    set -u

    nameref a=$1
    shift

    typeset file
    ls | while read file
    do
        a[${#a[*]}]=$fil
    done
}

unset files
typeset -a files

foo files

print files:
typeset -p files
print '---'
$ ./fail
Version AJM 93u+ 2012-08-01
--- open code
./fail: line 14: fil: parameter not set
files:
typeset -a files
---
--- with a function
./fail[41]: foo: line 34: fil: parameter not set
$ 
-- 
Aaron Davies
[email protected]
_______________________________________________
ast-users mailing list
[email protected]
http://lists.research.att.com/mailman/listinfo/ast-users

Reply via email to