Я хочу адаптировать это так, чтобы при достижении функцией последнего позиционного аргумента условие 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
Вы используете сдвиг, поэтому просто проверьте, когда «$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