failures=0 check() { testcase=$1 expect=$2 eval "set -- $testcase" actual="$*" if [ "$actual" != "$expect" ]; then failures=$((failures+1)) printf '%s\n' "For $testcase, expected $expect actual $actual" fi } set -e T=$(mktemp -d ${TMPDIR:-/tmp}/sh-test.XXXXXX) trap 'rm -rf $T' 0 cd -P $T mkdir !!a touch !!a/fff chmod u-r . check '!!a/ff*' '!!a/fff' chmod u+r . exit $((failures != 0))