在 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"
我写了 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"