我怎样才能对此做出更紧凑的表达?
if [[ $arg =~ ^[[:digit:]]+$ ]]; then
vb=$arg
else
vb=1
fi
答案1
如果语句仅包含数字,则语句分配$arg
给变量,否则分配给。vb
$arg
1
vb
因此,它相当紧凑,并且很清楚发生了什么,假设读者知道如何解释扩展的正则表达式。
制定它的另一种方法是使用
vb=1
[[ $arg =~ ^[[:digit:]]+$ ]] && vb=$arg
正如评论中所建议的,但这会降低可读性。
编写代码的另一种方法是将测试委托给函数:
is_whole_number () {
[[ $1 =~ ^[[:digit:]]+$ ]]
}
if is_whole_number "$arg"; then
vb=$arg
else
vb=1
fi
这是更多的代码,但实际的if
- 语句更短,同时更容易理解,即使对于不熟悉正则表达式或 shell 脚本的人也是如此。