如何在 fish shell 中将函数参数作为字符串传递

如何在 fish shell 中将函数参数作为字符串传递

Octave 有一个 --eval 选项,它接受像“sqrt(4)”这样的字符串并输出“ans = 2”。我想创建一个将 a 参数作为字符串传递的函数,这样我就可以像这样调用它:

calc sqrt(4)

相当于:

octave --eval "sqrt(4)"

我写了一个简单的函数,如下:

function calc --wraps octave
   octave --eval "$argv"
end

这是行不通的。

输出:

$calc sqrt(4)
fish: Unknown command: 4
in command substitution
fish: Unknown error while evaluating command substitution
calc sqrt(4)

答案1

括号是鱼语法命令替换。你别无选择,只能转义括号或引用该参数:

calc sqrt\(4\)
calc 'sqrt(4)'

在这种简单的情况下,您可能更喜欢缩写

abbr -a calc 'octave --eval'

然后,当您输入时calcspace,fish 会将该文本替换为“octave --eval”。 (但仍然需要保护参数中的括号)

我可以让缩写自动添加“ ”吗?那么当我输入 calc Space 时,我会出现“octave --eval “ ” 并且我的光标会位于引号中?

不,但是您可以使用键绑定和commandline功能来执行此操作。

function calc_binding
    commandline -r 'octave --eval ""'
    commandline -C (math (commandline -C) - 1)
end

# bind Alt+c to that function
bind \ec calc_binding

当您按下 Alt-C 时,当前命令行将被替换,octave --eval ""并且光标将放置在结束双引号之前一个字符处。

查看bind --helpbind -a查看当前的键绑定:想一个您容易记住的键序列,bind -a如果它可用则会显示。

相关内容