# this is needed because posix mode restricts tilde expansion to assignment # statements preceding a command, instead of the default of expanding all # assignment statements on the line (e.g., after `export'). Without this, # the next-to-last test fails set +o posix HOME=/usr/xyz SHELL=~/bash echo ~ch\et echo ~/"foo" echo "~chet"/"foo" echo \~chet/"foo" echo \~chet/bar echo ~\chet/bar echo ~chet""/bar echo ":~chet/" echo abcd~chet echo "SHELL=~/bash" echo $SHELL echo abcd:~chet path=/usr/ucb:/bin:~/bin:~/tmp/bin:/usr/bin echo $path cd /usr cd /tmp echo ~- echo ~+ XPATH=/bin:/usr/bin:. # yes tilde expansion PPATH=$XPATH:~/bin echo "$PPATH" # no tilde expansion PPATH="$XPATH:~/bin" echo "$PPATH" # yes tilde expansion export PPATH=$XPATH:~/bin echo "$PPATH" declare -x PPATH=$XPATH:~/bin echo "$PPATH" # no tilde expansion export PPATH="$XPATH:~/bin" echo "$PPATH" declare -x PPATH="$XPATH:~/bin" echo "$PPATH" # more tests of tilde expansion when executing case commands case ~ in $HOME) echo ok 1;; *) echo bad 1 ;; esac case ~ in ~) echo ok 2 ;; \~) echo bad 2a ;; *) echo bad 2b ;; esac case $unset in "") echo ok 3 ;; *) echo bad 3 ;; esac USER=root # should exist just about everywhere echo ~$USER