# 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 2>&1 cat foo cat doesnt_exist >foo 2>&1 tr 'a-z' 'A-Z' $TMP ls fish # ash, lash, and hush do not create fish; bash and ksh do. # Thanks to Tapani Tarvainen 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