基本上是这样的
// 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[@]}"
)
没有什么可以阻止您将其输入到交互式bash
shell 中。这将使countnames
shell 函数在当前 shell 会话中可用。 (请注意,我正在子 shell ( (...)
) 中编写函数体。我这样做是因为我想设置nullglob
shell 选项而不影响调用 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
或者使用zsh
shell 作为此函数的更复杂的助手:
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