如何将参数传递给自定义 zsh 函数?

2023-12-27

如何将参数传递给自定义 zsh 函数?
例如:

function kill_port_proc(port) {
    lsof -i tcp:<port interpolated here>| grep LISTEN | awk '{print $2}'
}

我在网上看到很多使用 ZSH 函数的示例,但几乎没有任何关于传递参数和插入它们的内容。


定义函数时,不能指定必需的参数。这就是为什么同时使用function关键字和括号()对我来说似乎没用。

要获取传递的参数,请使用位置参数 http://zsh.sourceforge.net/Doc/Release/Parameters.html#Positional-Parameters.

位置参数提供对 shell 函数的命令行参数的访问、shell 脚本或 shell 本身; [...]

参数n, where n是一个数字,是n第一个位置参数。参数$0是一个特殊情况[...]

有关$0位置参数:

用于调用当前 shell 的名称,或在调用时由 -c 命令行选项设置的名称。

If the FUNCTION_ARGZERO选项已设置,$0在进入 shell 函数时设置为函数名,并在输入源脚本时输入脚本名称,并在函数或脚本返回时重置为其先前的值。

使用你的例子:

function kill_port_proc {
    lsof -i tcp:"$1" | grep LISTEN | awk '{print $2}'
}

就我个人而言,我喜欢至少通过在定义之前添加函数签名来记录函数。

然后,当我想保护每个参数和只读参数免受意外修改时,我会声明它们的本地参数。

如果参数是强制性的,我使用特殊的参数扩展 http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion form:

${name?word}

${name:?word}

在第一种形式中,如果设置了名称,或者在第二种形式中如果名称既已设置且非空,然后代入其值;

否则,打印 word 并退出 shell。交互式 shell 而是返回到提示符。

如果省略单词,则打印标准消息。

我会如何写你的例子:

# kill_port_proc <port>
function kill_port_proc {
    readonly port=${1:?"The port must be specified."}

    lsof -i tcp:"$port" | grep LISTEN | awk '{print $2}'
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将参数传递给自定义 zsh 函数? 的相关文章

随机推荐