由于 bash 没有一流的函数,我通过将字符串传递给函数来模拟匿名函数,然后由 eval
对其求值。
it() {
echo "$1" # prints the description of the spec
beforeEach # a setup function
eval "$2"
if (($? == 0)); then
# do something
fi
afterEach # a cleanup function
}
it "should echo something" '{
echo "something"
}'
这允许编写非常简洁的测试(它定义了一个规范)。现在我想知道这是否是对 eval 的有效使用。
编辑
我知道在匿名函数字符串中不需要开始 { 和结束 },只是它类似于 Jasmine 之类的东西。
编辑
伪匿名函数
实际上是一个测试,也就是说在测试结束的时候,有类似的东西
[[ var == 'foo' ]]
或
((i > 10))
即某种测试(或断言,在 XUnit 术语中)。它不需要返回任何东西,只需要返回代码然后进行评估,如果返回代码为 0(成功),则描述以绿色打印,否则为红色(测试失败)。
最佳答案
对于一次性使用的“匿名”函数,我使用以下约定在函数范围内执行 bash 脚本:
#!/usr/bin/env bash
_() {
#...
} && _ "$@"
unset -f _
虽然不是真正的匿名,但这类似于 IIFE (Immediately-Invoked Function Expression) JavaScript 中的习语。
Bash 函数必须有一个名字。您可以使用任何您喜欢的名称(main
是一个流行的选择。)我更喜欢单下划线 _
因为 a) 它很短 b) 它通常用于许多语言中表示一次性值(value)。
关于bash - 在 bash 中实现匿名函数是否可行(必要时甚至使用 eval)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12299676/