This is a multi-part MIME message sent by reportbug.
Package: dash
Version: 0.5.12-12
Severity: normal
Tags: upstream
Problem:
set -- 1
shift 2
... causes program to exit
The exit is a bit unexpected as the whole
program terminates. Suggested change:
1. shift all positional parameters
2. set status code $?
3. continue execution
This would also be allowed by POSIX:
Bash and Zsh behaves like this.
This would make it possible to write code:
set -- 1
if shift 2 ; then
... do something, a warning message to user ...
fi
... continue
Caveat: I'm aware of this, but perhaps
the default behaviour with N could be
chnaged to be more script friendly.
shift $#
See also attached test script.
CONSEQUENCES OF ERRORS
Program execution is interrupted and
program cannot do any error handling of
their own.
Ref: POSIX 2018 (shift):
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_25_01
EXIT STATUS
If the n operand is invalid or is greater than "$#", this may be
considered a syntax error and a non-interactive shell may exit; if
the shell does not exit in this case, a non-zero exit status shall
be returned. Otherwise, zero shall be returned.
-- System Information:
Debian Release: trixie/sid
APT prefers testing
APT policy: (500, 'testing')
Architecture: amd64 (x86_64)
Kernel: Linux 6.1.0-6-amd64 (SMP w/4 CPU threads; PREEMPT)
Locale: LANG=C.UTF-8, LC_CTYPE=C.UTF-8 (charmap=UTF-8), LANGUAGE not set
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled
Versions of packages dash depends on:
ii debianutils 5.21
ii libc6 2.40-6
dash recommends no packages.
dash suggests no packages.
-- debconf information:
dash/ineffectivediversion:
* dash/sh: true
#! /bin/sh
# Short: POSIX shift N and $?
# Desc: Test POSIX Special Built-in support: shift N, when not enough args
# Url:
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_26_01
#
# Notes:
#
# POSIX: "(...) If the n operand is invalid
# or is greater than `$#`, this may be
# considered a syntax error and a non-interactive
# shell may exit"
#
# Issues with `shift N` if there was not
# enough args to shift.
#
# Behaviour is not uniform accross shells.
# run this file under debug to see behavior.
#
# $sh -x <file>
#
# posh : error and exit with code 1
# dash : error and exit with code 2
# mksh : error and exit with code 1
# ksh93 : error and exit with code 1
# busybox ash: no error message and $? is set to 1
# bash : no error message and $? is set to 1
# zsh : error messahe and $? is set to 1
test ()
(
# Run test in subshell compound-list
# to prevent premature exit call
set -- 1
shift 2
echo "x$?"
)
file=t.ret
# ignore file redirection
# shellcheck disable=SC2065
if test > "$file"; then
# Normal program execution
code=$(cat "$file")
code=${code#x}
rm -f "$file"
[ ! "$code" = 0 ]
else
code=$?
rm -f "$file"
echo "FATAL: shift called exit $code"
exit "$code"
fi
--- SoupGate-Win32 v1.05
* Origin: fsxNet Usenet Gateway (21:1/5)