1#! /bin/sh 2# 3# @(#)local.sh 1.2 17/05/28 2016 J. Schilling 4# 5 6# Read test core functions 7. ../../common/test-common 8 9# 10# Basic tests to check whether local variables work 11# 12 13cat > ./echo1 <<-"XEOF" 14 echo $var 15XEOF 16chmod +x ./echo1 17 18cat > ./echo2 <<-"XEOF" 19 #!/bin/sh 20 echo $var 21XEOF 22chmod +x ./echo2 23 24# 25# Check for Solaris bug #3000663: 26# unexported variables are available to simple shell scripts 27# 28docommand local00 "$SHELL -c 'var=init; echo \$var; ./echo1'" 0 "init\n\n" "" 29 30# 31# Check for the bug that was introduced while fixing Solaris bug #3000663: 32# unexported variables are available to simple shell scripts if made readonly 33# 34docommand local01 "$SHELL -c 'var=init; readonly var; echo \$var; ./echo1'" 0 "init\n\n" "" 35 36# 37# Basic "local var" test: original value must reappear after the function ends 38# 39docommand local10 "$SHELL -c 'var=init; f() { local var; var=neu; echo \$var; } ; f; echo \$var'" 0 "neu\ninit\n" "" 40 41# 42# Unset local var: "unset" must only affect the local value inside the function 43# 44docommand local11 "$SHELL -c 'var=init; f() { local var; var=neu; echo \$var; unset var; echo \$var; } ; f; echo \$var'" 0 "neu\n\ninit\n" "" 45 46# 47# Unexported local variables in function must not be visible in scripts 48# 49docommand local12 "$SHELL -c 'var=init; f() { local var; var=neu; echo \$var; ./echo1; } ; f; echo \$var'" 0 "neu\n\ninit\n" "" 50 51# 52# Exported variable is exported in local variant as well 53# 54docommand local13 "$SHELL -c 'var=init; export var; f() { local var; var=neu; echo \$var; ./echo1; } ; f; echo \$var'" 0 "neu\nneu\ninit\n" "" 55docommand local14 "$SHELL -c 'var=init; export var; f() { local var; var=neu; echo \$var; ./echo2; } ; f; echo \$var'" 0 "neu\nneu\ninit\n" "" 56 57# 58# Only the local variant is exported 59# 60docommand local15 "$SHELL -c 'var=init; f() { local var; export var; var=neu; echo \$var; ./echo1; } ; f; echo \$var; ./echo1'" 0 "neu\nneu\ninit\n\n" "" 61docommand local16 "$SHELL -c 'var=init; f() { local var; export var; var=neu; echo \$var; ./echo2; } ; f; echo \$var; ./echo2'" 0 "neu\nneu\ninit\n\n" "" 62 63# 64# Unset var: local variable in function must be reverted into unset variable 65# 66docommand local17 "$SHELL -c 'unset var; f() { local var; var=neu; echo \$var; } ; f; echo \$var'" 0 "neu\n\n" "" 67 68#exit 69remove ./echo1 ./echo2 70success 71