expect() { echo expect "$@" } tool_var() { eval $1=\"\${$1:-$2}\" export $1 } A="aaa bbb ccc" unset B tool_var B ${B:-"$A"} expect '' recho "$A" expect '' recho "$B" eto_prepend() { eval $1=\'$2\''${'$1':+":"${'$1'}}'; export $1 } foo=bar; export foo eto_prepend foo baz expect '' recho $foo expect '' recho ${foo-"bar"} aa='aaa bbb ccc' expect '' recho ${zzz-"$aa"} expect '' recho ${zzz:-"bar"} expect '' recho "${zzz:-bar}" expect '' recho "${zzz:-"bar"}" var=abcde expect '' recho "${var:-xyz}" expect '' recho "${var:=xyz}" expect '' recho "${var:+xyz}" set 'a b' c d e f expect ' ' recho ${1+"$@"} expect '' recho "${1-"$@"}" expect ' ' recho ${1-"$@"} expect ' ' recho "${1+$@}" expect ' ' recho "${1+"$@"}" HOME=/usr/homes/chet somevar= expect "<$HOME>" recho ${somevar:-~} expect "<$HOME>" recho "${somevar:-~}" expect '<~>' recho "${somevar:-"~"}" expect '<\~>' recho "${somevar:-\~}" expect '<\ \~>' recho "${somevar:-\ \~}" expect '<\ \ \~>' recho "${somevar:-\ \ \~}" expect "<$HOME>" recho ${somevar:-$HOME} expect "<$HOME>" recho "${somevar:-$HOME}" expect "<$HOME>" recho "${somevar:-"$HOME"}" expect '<$HOME>' recho "${somevar:-\$HOME}" expect '<\ $HOME>' recho "${somevar:-\ \$HOME}" expect '<\ \ $HOME>' recho "${somevar:-\ \ \$HOME}" foo=bar expect "<'bar'>" recho "${foo+'$foo'}" expect "<'bar'>" recho "${fox='$foo'}" P='*@*' expect '<*@*>' recho "${P%"*"}" expect '<*@*>' recho "${P%'*'}" expect '<*@>' recho ${P%"*"} expect '<*@>' recho ${P%'*'} expect '<*@*>' recho ${P%""} expect '<*@*>' recho ${P#""} expect '<*@*>' recho ${P#"$foobar"} expect '<*@*>' recho ${P%"$foobar"} s1=abcdefghijkl s2=efgh first=${s1/$s2*/} expect '' recho $first last=${s1##$first} expect '' recho $last shift $# UNAME_RELEASE=${1:-4.2MP} RELEASE=`expr "$UNAME_RELEASE" : '[^0-9]*\([0-9]*\)'` # 4 case "$RELEASE" in "") RELEASE=0 ;; *) RELEASE=`expr "$RELEASE" + 0` ;; esac REL_LEVEL=`expr "$UNAME_RELEASE" : '[^0-9]*[0-9]*.\([0-9]*\)'` # 1 REL_SUBLEVEL=`expr "$UNAME_RELEASE" : '[^0-9]*[0-9]*.[0-9]*.\([0-9]*\)'` # 2 expect '<4> <2>' recho $RELEASE $REL_LEVEL $REL_SUBLEVEL b1() { b2 ${1+"$@"} } b2() { recho $* recho $# } expect '<1>' b1 '' expect ' <2>' b1 bar '' expect ' <2>' b1 '' bar expect '<4>' b1 '' '' '' '' NL="\\ " NNL="+$NL+" expect '<--\> <-->' recho --$NL-- expect '<--\^J-->' recho "--$NL--" expect '<--+\> <+-->' recho --$NNL-- expect '<--+\^J+-->' recho "--$NNL--" expect '<-+\> <+-\> <->' recho -$NNL-$NL- set '' expect '' recho "$*xy" expect '' recho "x$*y" expect '' recho "xy$*" expect '<>' recho "$*" expect nothing recho $* unset undef ; set "" recho ${undef-"$zzz"} recho x${undef-"$zzz"} recho x${undef-"$@"} recho ${undef-"$@"} recho ${undef-"$zzz"}x recho ${undef-"$@"}x recho "$@"x recho "$zzz"x recho ${undef-} recho ${undef-""} yyy="" recho "$xxx"x recho "$yyy"x set "" "abd" "" recho "$@"x recho "$@"$xxx OIFS="$IFS" arg=a,b,c,d,e,f IFS=, export z=$arg eval z1=\"$arg\" IFS="$OIFS" recho $z recho $z1 # should give an error abc\=def zz="a b c d e" declare a=$zz recho "$a" recho $a recho $(echo "foo$(echo ")")") # test backslash escapes recho \a recho \\a recho "\a" recho "\\a" recho '\a' recho '\\a' recho $(zecho \a) recho $(zecho \\a) recho $(zecho "\a") recho $(zecho "\\a") recho $(zecho '\a') recho $(zecho '\\a') recho `zecho \a` recho `zecho \\a` recho `zecho "\a"` recho `zecho "\\a"` recho `zecho '\a'` recho `zecho '\\a'` a=foo recho \$a recho \\$a recho "\$a" recho "\\$a" recho '\$a' recho '\\$a' recho $(zecho `zecho \a`) recho $(zecho `zecho \\a`) recho $(zecho `zecho "\a"`) recho $(zecho `zecho "\\a"`) recho $(zecho `zecho '\a'`) recho $(zecho `zecho '\\a'`) # should echo G { I K } recho ${abc:-G { I } K } abc=hi # should echo hi K } recho ${abc:-G { I } K } # should echo a* unset foo recho "${foo:-"a"}*"