shell:“无法移动那么多”错误

shell:“无法移动那么多”错误

以下脚本在我的其中一台机器上运行良好,1然后打印2

#!/bin/sh

echo "1"
shift
echo "2"

然而,在另一台机器上,它产生以下输出:

1
./script.sh: 4: shift: can't shift that many

man shift没有帮助(No manual entry for shift)。

这个错误是什么,为什么会发生,我该如何修复它?

答案1

什么是shift它是一个内置的 shell,其工作方式如下(改编自局部差分协议):

shift 命令接受一个参数,即数字(如果不存在,则假定为 1)。位置参数(例如命令参数)按此数字 N 向左移动。从 N+1 到 $# 的位置参数被重命名为从 $1 到 $# - N+1 的变量名。

通常,你会创建一个循环来处理一个或多个参数,然后调用 shift 来“忘记”它们,并再次循环来处理接下来的参数。

错误原因: 这个错误是由于一些 shell(但不是全部)检测到没有足够的参数shift。具体来说,dash它会将其视为致命错误。

可能的解决方案:

  • 测试是否有足够的剩余参数:if [ "$#" -gt 0 ]; then shift; fi

  • 添加条件参数:shift $(( $# > 0 ? 1 : 0 ))

相关内容