在交互式 shell 中声明并使用 bash 中的临时函数

在交互式 shell 中声明并使用 bash 中的临时函数

基本上是这样的

// declare
const my_func = function(param1, param2) { do_stuff(param1, param2) }
// use
my_func('a', 'b');

全部在当前的交互式 shell 中而不使用文件

答案1

bash交互式shell 中函数的定义方式与 shell 脚本中的定义方式相同bash

以您的示例为起点:

my_func () { do_stuff "$1" "$2"; }

您可以在命令行上输入该内容。然后调用它(也在命令行上)

my_func 'something' 'something else' 'a third thing'

请注意,您不必像在 C 或 C++ 等语言中那样声明参数列表。由函数来智能地使用它获得的参数(并且由您来记录函数的使用,它是否会用于以后更严肃的工作)。

这将do_stuff使用我传递给的三个参数中的第一个进行调用my_func

一个做某事的函数轻微地更有意思的:

countnames () (
    shopt -s nullglob
    names=( ./* )
    printf 'There are %d visible names in this directory\n' "${#names[@]}"
)

没有什么可以阻止您将其输入到交互式bashshell 中。这将使countnamesshell 函数在当前 shell 会话中可用。 (请注意,我正在子 shell ( (...)) 中编写函数体。我这样做是因为我想设置nullglobshell 选项而不影响调用 shell 中设置的 shell 选项。names然后该数组也会自动变为本地数组。)

测试:

$ countnames
There are 0 visible names in this directory
$ touch file{1..32}
$ ls
file1  file12 file15 file18 file20 file23 file26 file29 file31 file5  file8
file10 file13 file16 file19 file21 file24 file27 file3  file32 file6  file9
file11 file14 file17 file2  file22 file25 file28 file30 file4  file7
$ countnames
There are 32 visible names in this directory

或者使用zshshell 作为此函数的更复杂的助手:

countnames () {
    printf 'There are %d visible names in this directory\n' \
        "$(zsh -c 'set -- ./*(N); print $#')"
}

要“取消定义”(删除)函数,请使用unset -f

$ countnames
There are 3 visible names in this directory
$ unset -f countnames
$ countnames
bash: countnames: command not found

相关内容