在 bash 中定义标志参数

Defining flag parameters in bash

我写了 bash 脚本,其中包含一些日志记录,以查看执行的每个步骤中发生了什么。

现在,我可以将这些日志拆分为调试信息和用户信息(某些内容已完成等)。所以我想要一些标志参数,比如 --verbose,我在其他一些 bash 函数中看到它可以启用完整的日志记录,用法如下:

some_function --verbose

some_function -v

我叫它标志参数,不知道什么是正确的名字,所以我找不到任何有用的东西。

如何为bash脚本定义这样的参数?

现在,我使用了变通方法并将其作为正常的位置参数(如$n)。确切地说,我有四个参数的列表,所以我这样收集这个标志:

verbose=
if [ ! "$verbose" == "--verbose" ]; then
  verbose=""
fi

所以,如果参数与标志不匹配,那么我将其留空,如果我想使用它,我只需将它与空字符串进行比较。

虽然对我来说有一个很大的缺点:它必须在参数列表中的第 4 位。

案例更适合这个

while [[ "$@" ]]; do
    case "" in
        -v|--verbose) verbose="true";;
    esac
    shift
done

同样可以在函数中完成,但请注意,在这种情况下,它将处理传递给函数的参数 some_function -v

some_function () {
    while [[ "$@" ]]; do
        case "" in
            -v|--verbose) verbose="true";;
        esac
        shift
    done
}

然后在脚本的某处你可以检查是否设置了 verbose

[[ "$verbose" ]] && echo "verbose mode" || echo "silent mode"