为什么在这种情况下使用“shift”命令?

为什么在这种情况下使用“shift”命令?

我正在重写 debootstrap 以适合我和教育。为什么在“functions”文件中的交互代码中使用“shift”命令?没有那么多参数发送来使用“shift”,而且据我所知,函数参数只能在函数中访问。

例子:

error () {
# <error code> <name> <string> <args>
local err="$1"
local name="$2"
local fmt="$3"
shift; shift; shift
if [ "$USE_DEBIANINSTALLER_INTERACTION" ]; then
    (echo "E: $name"
    for x in "$@"; do echo "EA: $x"; done
    echo "EF: $fmt") >&4
else
    (printf "E: $fmt\n" "$@") >&4
fi
exit $err
}

答案1

这三个转变从参数中删除了错误代码、名称和字符串,因此其余参数可以方便地放入脚本第九行的循环中$@for

相关内容