以下脚本在我的一台机器上运行良好,1
然后打印2
:
#!/bin/sh
echo "1"
shift
echo "2"
Run Code Online (Sandbox Code Playgroud)
然而,在另一台机器上,它产生以下输出:
1
./script.sh: 4: shift: can't shift that many
Run Code Online (Sandbox Code Playgroud)
man shift
没有帮助(No manual entry for shift
)。
这是什么错误,为什么会发生,我该如何解决?
ano*_*nol 10
什么是shift
:它是一个内置的外壳,其工作方式如下(改编自TLDP):
shift 命令接受一个参数,一个数字(如果不存在,则假定为 1)。位置参数(例如命令参数)向左移动这个数字 N。从 N+1 到 $# 的位置参数被重命名为从 $1 到 $# - N+1 的变量名称。
通常,您会创建一个循环,在其中处理一个或多个参数,然后调用 shift 以“忘记”它们并再次循环以处理以下参数。
错误原因:
错误来自以下事实,即某些 shell(但不是全部)检测到shift
. 特别是,dash
认为它是一个致命的错误。
可能的解决方案:
测试是否有足够的剩余参数: if [ "$#" -gt 0 ]; then shift; fi
添加条件参数: shift $(( $# > 0 ? 1 : 0 ))
归档时间: |
|
查看次数: |
10844 次 |
最近记录: |