bash - 在 bash 中实现匿名函数是否可行(必要时甚至使用 eval)?

标签 bash

由于 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/

相关文章:

bash - 如何从 Bash 脚本检测操作系统?

python - 如何根据 bash 脚本中的正则表达式拆分字符串

linux - 在 bash shell 中分析计时器过期循环

linux - 如何通过命令行在多个网络连接之间进行选择?

linux - 如何将变量和字符串连接为 bash 脚本中 ffmpeg 命令的 "output file"的完整路径

bash - 使用bash读取文件时缺少行内容

bash - 我可以使用 netcat 运行带有/参数的 PHP CLI 吗?

bash - .bash_profile 中历史文件的 perl 脚本附加到历史命令

linux - 将 stderr 重定向到记录器,然后重定向到文件

linux - bash 脚本打开 chrome 然后在 chrome 关闭时关闭计算机