busybox/tests/sh.testcases
Eric Andersen 04407e522b Another hush update from Larry:
Fixes the interaction between if/then/else/fi syntax and variables.
    I planned to do it right from the beginning, but my implementation
    was buggy.  Also adds the relevant test cases.  Also adds some old
    Matt Kraai variable test cases that got left out somehow.
2001-06-07 16:42:05 +00:00

90 lines
1.9 KiB
Plaintext

# try running this with bash, ksh, ash, and hush.
# simple quoting rules.
echo a b
echo "a b"
echo a "" b
echo a '' b
echo hello?
echo "hello?"
echo t* hello
echo t\* hello
# quick and painless exit for lash
if false; then true; exit; fi
# fairly simple command substitution
echo `echo -e foo\\\necho bar`
echo THIS IS A TEST >foo
cat $(echo FOO | tr 'A-Z' 'a-z')
cat foo | tr 'A-Z' 'a-z'
cat $(echo FOO | tr 'A-Z' 'a-z') | tr 'A-Z' 'a-z'
cat foo | if true; then tr 'A-Z' 'a-z'; else echo bar1; fi
cat foo | if false; then tr 'A-Z' 'a-z'; else echo bar2; fi
if true; then tr 'A-Z' 'a-z'; else echo bar3; fi <foo
if false; then tr 'A-Z' 'a-z'; else echo bar4; fi <foo
if true || false; then echo foo; else echo bar5; fi
if true && false; then echo bar6; else echo foo; fi
# basic distinction between local and env variables
unset FOO
FOO=bar env | grep FOO
echo "but not here: $FOO"
FOO=bar
env | grep FOO
echo "yes, here: $FOO"
FOO=
echo a $FOO b
echo "a $FOO b"
# not quite so basic variables. Credit to Matt Kraai.
unset FOO
FOO=bar
export FOO
env | grep FOO
unset FOO
export FOO=bar
FOO=baz
env | grep FOO
# interaction between environment variables and if/then and subshells
FOO=default
if true; then FOO=new; fi
echo $FOO
FOO=default
(FOO=bogus)
echo $FOO
# make sure we can duplicate file descriptors properly
echo replacement >foo 2>&1
cat foo
cat doesnt_exist >foo 2>&1
tr 'a-z' 'A-Z' <foo
# fairly simple example of hush expanding variables too early
unset TMP
rm -f fish
TMP=fish && >$TMP
ls fish
# ash, lash, and hush do not create fish; bash and ksh do.
# Thanks to Tapani Tarvainen <tt@mit.jyu.fi> for this stress test.
unset TMP
rm -f fish
TMP=fish >$TMP
ls fish
# The following example shows that hush's parser is
# not _really_ Bourne compatible
echo "echo Hello World" >"a=b"
unset a
chmod a+x "a=b"
PATH=$PATH:.
"a=b"
echo $a
# assuming the shell wasn't too buggy, clean up the mess
rm -f a=b fish foo