如何处理 Zsh 中的错误"shift count must be <= $#"?



我想构建一个命令args,如下所示:

$ command <args> <parameter>
$ cut -d ' '

构建命令的代码是这样写的:

function command(){
if [ "$#" -gt 0 ]; then
while [ "$#" -gt 0 ]; do
case "$1" in
'-t'|'--type')
type_parameter=$2
shift 2
;;
* )
shift 1
;;
esac
done
fi
}

我想检测一下,如果在特殊的<args>之后没有任何参数存在,那么我可以编写一个错误处理程序代码。

$ command -t 123 # this is the input value I want.
good input!!
$ command -t     # I want to detect this situation happen.
wrong input!!

但现在我遇到了错误:

$ command -t 
command:shift:101: shift count must be <= $#

我不知道如何解决这个问题,有什么方法可以完美地处理或避免它吗?

只需测试参数的数量。你可以做一些类似的事情,而不是无条件地做shift 2

if (( $# >= 2 ))
then
shift 2
else
echo "You need to provide an argument to -z!"
exit 21
fi

这将允许您打印自己的错误消息。当然,如果您不想将丢失的选项参数视为错误,您也可以脱离循环(因为您知道无论如何都不会留下任何参数(。

相关内容

  • 没有找到相关文章

最新更新