无论定义何种方式,将bash中的变量评估为true的可移植方法是什么。
假设我们将DEBUG名称用于变量,这将是评估逻辑:
set -ueo pipefail
模式运行)0
,False,FALSE,false,no - >假稍微偏离上述规范是可以接受的,但是这个想法是相同的,为用户提供一些关于他如何定义它的灵活性,并避免由于意外输入导致的执行失败"。
如果有人找到一种干净的方式来实现它,那就更有荣耀了。
答案 0 :(得分:2)
为变量设置合理的默认值:
let rec fib =
// do something here, if fib invoked here directly, it's definitely an error, not warning.
fun n ->
match n with
| 0 -> 1
| 1 -> 1
| _ -> fib (n - 1) + fib (n - 2)
然后,在您的代码中,检查:
DEBUG="${DEBUG:-0}"
进一步阅读:https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html
答案 1 :(得分:1)
虽然我不建议对您允许的值过于灵活,但我会使用case
语句明确地匹配允许的值,并为任何其他值引发错误。
DEBUG=${DEBUG:-0} # As suggested by hek2mgl
shopt -s nocasematch # Ignore the case of the value
case $DEBUG in
0|false|no)
echo "DEBUG is false"
;;
1|true|yes)
echo "DEBUG is true"
;;
*)
echo "Invalid setting for DEBUG: $DEBUG"
exit 1
;;
esac