linux - 有人可以帮我处理这些 shell 脚本行吗?我无法理解这些行中的 DEBUG 有什么用
问题描述
# Define DEBUG=true on cmdline, if needed
DEBUG=${DEBUG:-false}
[[ ${DEBUG} = true ]] || DEBUG="false"
解决方案
解释
如果 的内容为空,则第一个赋值将变量设置DEBUG
为。请注意,如果还没有初始化,它也被认为是空的,因此将接收该值。false
DEBUG
DEBUG
false
第二行使用 OR 运算符 using ||
,它与以下内容完全相同:
if ! [[ ${DEBUG} = true ]]
then
DEBUG="false"
fi
换句话说,false
当且仅DEBUG
不等于时,它将值分配给您的变量true
。
最后,这段代码的目的是将变量定义DEBUG
为非布尔值,如果变量true
不包含布尔值false
,则使用默认值。false
改进
我认为第一个赋值是没有意义的,因为如果变量在这段代码的开头是空的,那么最后一行将把变量赋值给false
反正。
此外,${DEBUG}
应该用引号保护 ,例如[[ "${DEBUG}" = true ]]
,[[ ${DEBUG} = true ]]
如果变量包含空格,您的脚本可能无法正常工作。
可能有点矫枉过正,但我鼓励检查区分大小写并使用后备代码。
假设用户DEBUG=TRUE
在调用您的脚本之前定义(大写), 的值DEBUG
将被强制为false
. 我猜用户不会很高兴。
以下代码解决了所有这些问题:
# Define DEBUG=true on cmdline, if needed
DEBUG=${DEBUG,,} # Force the variable to lowercase
[[ "${DEBUG}" = true ]] || DEBUG=false