# vim: set ft=fish: function never_runs while false end end function early_return while true return 2 end end function runs_once set -l i 1 while test $i -ne 0 && set i (math $i - 1) end end # this should return 1 never_runs; echo "Empty Loop in Function: $status" # this should return 0 runs_once; echo "Runs Once: $status" # this should return 2 early_return; echo "Early Return: $status" logmsg Loops exit status handling function set_status ; return $argv[1]; end # The previous status is visible in the loop condition. # This includes both the incoming status, and the last command in the # loop body. set_status 36 while begin set -l saved $status echo "Condition Status: $status" set_status $saved end true end # The condition status IS visible in the loop body. set_status 55 while true echo "Body Status: $status" break end # The status of the last command is visible in the loop condition set_status 13 while begin set -l saved $status echo "Condition 2 Status: $saved" test $saved -ne 5 end set_status 5 end # The status of the last command is visible outside the loop set rem 5 7 11 while [ (count $rem) -gt 0 ] set_status $rem[1] set rem $rem[2..-1] end echo "Loop Exit Status: $status" # Empty loops succeed. false while false; end echo "Empty Loop Status: $status"