我有一个函数,它取决于功能更改的参数。
我知道我可以做到:
function foo {
PARAM1=$1
PARAM2="$2"
VAR=$3
if[[ -z "$VAR" ]]; then
# code here
else
# other code here
fi
}
我想知道是否有更适合 bash 的方法。这会起作用,但我不想有类似的东西
foo "x" "y" "blah"
foo "x" "y" "true"
foo "y" "y" "1"
都是等价的。
是否有更适合 Bash 的方法?
您可以为您的函数提供命令行选项。通常,使用不带参数的命令行选项是向 shell 脚本、shell 函数和实用程序提供二进制/布尔值(“on/off”、“true/false”、“enable/disable”)的常用方法。
该选项
-t
对用户来说就像一个布尔标志。使用它将flag
在函数内部设置为true
(将其从默认值更改为false
)。该-t
选项将用作函数的第一个参数。调用函数将使用
或者
后者调用会将
flag
函数中的变量设置为true
.一般来说
一般来说,将布尔值传递给任何语言的函数都是不可读的。例如
calculate_interest 5y 4% true
。读者不知道什么是真实的。因此使用枚举:
{ per_month, per_year }
. 现在你可以做calculate_interest 5y 4% per_year
。这更具可读性。在 bash
Bash 不是静态类型的(或强类型的,或者根本没有很多类型系统),因此您可以传入许多不同的值。一个人会走这条路,其他人不会。不希望有许多不同的值导致相同的路径。
因此添加代码以检查输入是否是两个可接受的值之一。在函数开始时执行此操作,您不想通过做某事来挽救 ½ 方式。
如果你必须调用一个接受布尔值的函数怎么办
所以有人没有听从我的建议,你必须调用一个接受布尔值的函数。你可以做些什么来使你的代码可读?
calculate_interest 5y 4% per_year=True
,则使用它们。它会有所帮助,但不会告诉您 的含义calculate_interest 5y 4% per_year=False
。我建议遵循这样的格式:
这样该函数将更加健壮和可读:
优点:
缺点: