mirror of
https://https.git.savannah.gnu.org/git/bash.git
synced 2026-06-21 12:57:58 +02:00
157 lines
3.8 KiB
Plaintext
157 lines
3.8 KiB
Plaintext
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
#
|
|
. ./test-aux-functions
|
|
#
|
|
# initial set of tests for ${Ccommand; } nofork command substitution
|
|
|
|
# basic functionality
|
|
|
|
echo ${ printf '%s\n' aa bb cc dd; }
|
|
echo AA${ printf '%s\n' aa bb cc dd; }BB
|
|
|
|
echo ${ printf '%s\n' aa bb cc dd; return; echo ee ff; }
|
|
echo ${ printf '%s\n' aa bb cc dd
|
|
}
|
|
echo DDDDD${
|
|
printf '%s\n' aa bb cc dd
|
|
}EEEEE
|
|
unset x
|
|
echo ${ printf '%s\n' aa bb cc dd; x=42 ; return 12; echo ee ff; }
|
|
echo outside: $x
|
|
unset x
|
|
echo ${ local x; printf '%s\n' aa bb cc dd; x=42 ; return 12; echo ee ff; }
|
|
echo outside: $x
|
|
xx=${ local x; printf '%s\n' aa bb cc dd; x=42 ; return 12; echo ee ff; }
|
|
echo assignment: $?
|
|
unset xx
|
|
|
|
declare -i x
|
|
y=${ :;}
|
|
declare -i z
|
|
unset -v x y z
|
|
|
|
# variables can be local, but all function declarations are global
|
|
func() { echo func-outside; }
|
|
xx=${ func() { echo func-inside; }; }
|
|
declare -f func
|
|
xx=${ unset -f func; }
|
|
declare -f func
|
|
|
|
echo ${ ( echo abcde );}
|
|
|
|
echo ${| echo 67890; REPLY=12345; } # works in mksh
|
|
x=${| REPLY= ;}
|
|
recho "$x"
|
|
unset x
|
|
x=${| :;}
|
|
recho "$x"
|
|
unset x
|
|
|
|
echo ${ echo aa; },${ echo bb; }
|
|
|
|
# basic job control
|
|
set -m
|
|
echo this should disappear | echo JOB${ printf '%s\n' aa bb cc dd; }CONTROL | cat
|
|
set +m
|
|
|
|
# command not found should still echo error messages to stderr
|
|
echo NOT${ p; }FOUND
|
|
|
|
# alias handling in command substitutions, default and posix mode
|
|
alias p=printf
|
|
alias e='echo aliasval'
|
|
echo "${ typeset x;
|
|
for f in 1 2; do p '%s\n' $f ; shopt expand_aliases; done
|
|
unalias p
|
|
alias e='echo inside redefine'
|
|
x=42 ; return; echo this should not be seen; }"
|
|
echo outside: $x
|
|
alias p e
|
|
shopt expand_aliases
|
|
|
|
alias p=printf
|
|
set -o posix
|
|
echo "${ typeset x;
|
|
for f in 1 2; do p '%s\n' $f ; shopt expand_aliases; done
|
|
unalias p;
|
|
x=42 ; return; echo this should not be seen; }"
|
|
echo outside: $x
|
|
alias p
|
|
shopt expand_aliases
|
|
|
|
set +o posix
|
|
|
|
shopt -s expand_aliases
|
|
|
|
alias p=printf
|
|
echo "${ typeset x;
|
|
for f in 1 2; do p '%s\n' $f ; /bin/echo xx ; shopt expand_aliases; done
|
|
x=42 ; return; echo ee ff; }"
|
|
echo outside: $x
|
|
shopt expand_aliases
|
|
|
|
# more tests for value substitutions and local variables
|
|
a=1 b=2
|
|
a=${| local b ; a=12 ; b=22 ; REPLY=42 ; echo inside: $a $b $REPLY; }
|
|
echo outside: $a $b
|
|
unset a b
|
|
|
|
# this form doesn't remove the trailing newlines
|
|
REPLY=42
|
|
a=${| REPLY=$'newlines\n\n'; }
|
|
echo "$a"
|
|
echo outside: $REPLY
|
|
|
|
# how do we handle shift with these weird ksh93 function-like semantics?
|
|
# ksh93 doesn't reset the positional parameters here
|
|
set -- 1 2
|
|
echo before: "$@"
|
|
: "${ shift;}"
|
|
echo after: "$@"
|
|
|
|
set -- 1 2
|
|
echo before: "$@"
|
|
: "${| shift;}"
|
|
echo after: "$@"
|
|
|
|
set -- 1 2
|
|
echo before: "$@"
|
|
: "${ ( shift) }" # parse_comsub adds the closing semicolon anyway
|
|
echo after: "$@"
|
|
|
|
# nested funsubs
|
|
echo ${ echo X${ echo nested; }Y; }
|
|
echo ${ echo a ; echo ${ echo nested; }; echo b; }
|
|
|
|
# nested funsubs/comsubs
|
|
x=${
|
|
echo ${ echo one;} $(echo two)
|
|
}
|
|
echo $x
|
|
|
|
# mixing funsubs and arithmetic expansion
|
|
echo $(( ${ echo 24 + 18; }))
|
|
echo $(( ${ echo 14 + 18; }+ 10))
|
|
echo ${ echo $(( 24+18 )); }
|
|
|
|
# alias expansion and nested funsubs in other constructs
|
|
test_runsub ./comsub21.sub
|
|
test_runsub ./comsub22.sub
|
|
test_runsub ./comsub23.sub
|
|
test_runsub ./comsub24.sub
|
|
test_runsub ./comsub25.sub
|
|
test_runsub ./comsub26.sub
|
|
test_runsub ./comsub27.sub
|
|
test_runsub ./comsub28.sub
|