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 --help
并bind -a
查看当前的键绑定:想一个您容易记住的键序列,bind -a
如果它可用则会显示。