Portable Shell Boundaries
Portable Test
Single-Bracket Conditions
[ is widely available in POSIX-style shells. Simple numeric and string checks can stay portable when a script does not need Bash-only syntax.
Program
Play the script to choose a status value and see the portable test branch.
portable_test.sh
Replay: real traced execution (multi-file project)
#!/usr/bin/env bash
status=0
if [ "$status" -eq 0 ]; then
result="ok"
else
result="fail"
fi
echo "status:$result"
#!/usr/bin/env bash
status=1
if [ "$status" -eq 0 ]; then
result="ok"
else
result="fail"
fi
echo "status:$result"
status ← 0
3status=04if [ "$status" -eq 0 ]; thenvalues this step0statusif [ "$status" -eq 0 ]; then
3status=04if [ "$status" -eq 0 ]; then5 result="ok"values this step0statusresult ← ok
4if [ "$status" -eq 0 ]; then5 result="ok"6elsevalues this stepokresultecho "status:$result"
8fi9echo "status:$result"outputstatus:okvalues this stepokresult
status ← 1
3status=14if [ "$status" -eq 0 ]; thenvalues this step1statusif [ "$status" -eq 0 ]; then
3status=14if [ "$status" -eq 0 ]; then5 result="ok"values this step1statusresult ← fail
6else7 result="fail"8fivalues this stepfailresultecho "status:$result"
8fi9echo "status:$result"outputstatus:failvalues this stepfailresult
portable test
`[` works in POSIX-style shells for simple comparisons.
numeric comparison
`-eq` compares integer values.
boundary
Use Bash-only `[[ ... ]]` when you need its extra features; otherwise `[` can keep a script easier to port.