我想对此进行调整,以便当函数到达最后一个位置参数时, while 条件退出。
console_codes ()
{
local exec=0
local narg="$#" iarg=0
while (( narg > 0 )); do
opt="$1" ; iarg=$(( iarg + 1 ))
case $opt in
("-V"|"--version")
printf '%s\n' "Version"
return 0
;;
("-h"|"--help")
printf "Help.\n"
return 0
;;
("-e"|"--exec") exec=1 ; shift 1 ;;
(*) shift 1 ;;
esac
done
}
答案1
您正在使用shift,因此只需检查“$1”何时为空
while true; do
[ -z "$1" ] && break
echo "$1"
shift
done
答案2
您应该阅读man getopt getopts
,而不是重新重新发明解析选项。
$#
您可以通过意识到减少了以下内容来更紧凑地执行循环shift
:
while [[ $# -gt 0 ]] ; do
# some code using $1
shift
done