bash if 语句的紧凑表达式

bash if 语句的紧凑表达式

我怎样才能对此做出更紧凑的表达?

if [[ $arg =~ ^[[:digit:]]+$ ]]; then 
  vb=$arg
else
  vb=1
fi   

答案1

如果语句仅包含数字,则语句分配$arg给变量,否则分配给。vb$arg1vb

因此,它相当紧凑,并且很清楚发生了什么,假设读者知道如何解释扩展的正则表达式。

制定它的另一种方法是使用

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 脚本的人也是如此。

相关内容