. "$BST_LIB" require mksh mksh/present # basic command execution via -c check_out mksh/echo "hello" mksh -c 'echo hello' # POSIX arithmetic expansion check_out mksh/arith "42" mksh -c 'echo $((6 * 7))' # POSIX parameter expansion (prefix strip) check_out mksh/param "def" mksh -c 'x=abcdef; echo ${x#abc}' # ksh pattern substitution ${var/pat/rep} — a ksh feature a POSIX /bin/sh lacks check_out mksh/subst "heLlo" mksh -c 'x=hello; echo ${x/l/L}' # ksh arithmetic command (( )) — sets exit status from the expression check_out mksh/arithcmd "yes" mksh -c '(( 3 > 2 )) && echo yes' # control flow: for-loop counting check_out mksh/loop "4" mksh -c 'n=0; for i in a b c d; do n=$((n+1)); done; echo $n' # exit-status propagation (mksh signals via rc, so assert on rc directly) check_rc mksh/exit 3 mksh -c 'exit 3' # executes a real script file, not just -c: (( )) while-loop to a fixed count tmp=${TMPDIR:-/tmp}/bst-mksh.$$ printf '%s\n' '#!/bin/mksh' 'i=0' 'while (( i < 5 )); do i=$((i+1)); done' 'echo done=$i' > "$tmp.sh" 2>/dev/null check_out mksh/scriptfile "done=5" mksh "$tmp.sh" rm -f "$tmp.sh"