Zsh 中的移位失败:“移位计数必须 <= $#”

All*_*haw 3 bash shell zsh

我有一个 bash 脚本,其中包含shift命令的 bash 脚本。

在 bash 中运行正常,但在 zsh 环境中,shift命令似乎不同。

桀骜

$ shift
shift: shift count must be <= $#
Run Code Online (Sandbox Code Playgroud)

巴什

$ shift

# OK here
Run Code Online (Sandbox Code Playgroud)

命令与and不shift兼容吗?我怎样才能让脚本运行?zshbashzsh

ogu*_*ail 6

shift当 的参数大于位置参数的数量(即)时,两个 shell 都将其视为错误$#

由于shift没有参数实际上与 相同shift 1,因此当没有位置参数时,它会导致错误并返回非零退出值。

唯一的区别是zsh 会在发生这种情况时打印错误消息,而bash不会。

巴什

$ set --
$ shift
$ echo $?
1
Run Code Online (Sandbox Code Playgroud)

桀骜

$ set --
$ shift
shift: shift count must be <= $#
$ echo $?
1
Run Code Online (Sandbox Code Playgroud)