如何将块作为参数传递给 bash 函数?

如何将块作为参数传递给 bash 函数?

我想创建一个可以获取 bash 代码块的 bash 函数,如下time所示:

time {
  echo 123
  echo "Something else"
  sleep 1
}

基本上,我希望能够用我的 bash 代码包装该块。

编辑:在 @DavidPostill♦ 的第一个回答和评论之后更新了我的问题:例如,我想用 2>&1 > /dev/null 包装一个代码块,并用 包装时间time。我应该在 bash 之外编写一个程序来执行此操作吗?

function myfunction() {
  time { $1 } 2>&1 /dev/null
}
myfunction { sleep 1 }

编辑2:进一步阅读后,似乎这是不可能的,因为这time是 bash 的一个特例。

答案1

您不能直接将块作为对象传递,但您可以传递重定向块 ( ) 的文件描述符 (FD)<()并计算其输出时间(或对其进行任何操作)。{} 2>&1需要使用 inner 来捕获同一 FD 上的 stderr:

function myfunction() {
  time cat $1 >/dev/null
}
myfunction <({ 
  echo 123
  echo "Something else"
  sleep 1 
} 2>&1)

答案2

我希望能够用我的 bash 代码包装该函数并传递参数

带参数的函数示例

#!/bin/bash 
function quit {
   exit
}  
function e {
    echo $1 
}  
e Hello
e World
quit
echo foo 

该函数e打印它收到的第一个参数。

函数内的参数的处理方式与传递给脚本的参数的处理方式相同。

来源BASH 编程 - 简介 HOW-TO:函数


进一步阅读

相关内容