我可以在鱼壳中为`set -l`创建一个别名吗?

时间:2015-07-02 05:09:57

标签: shell fish

我在我的鱼脚本中自由使用set -l / set --local,所以我考虑为它做一个别名。名称local似乎很合适。不幸的是,显而易见的方法不起作用:

function local
  set -l $argv
end

这失败了,因为当然,它创建的变量是 local local函数本身。使用alias也不起作用,因为它只是上述功能的一种(可能是传统的)简写。

有没有什么方法可以在调用范围内创建一个局部变量而不会做比local foo 'bar'更复杂的事情?显然我可以做出像eval (local foo 'bar')这样的工作,但那会破坏目的。我愿意接受任何可以使这项工作的技巧或黑客,如果存在的话。

1 个答案:

答案 0 :(得分:2)

我不敢,局部变量总是最顶层范围的本地变量,并且在没有创建新范围的情况下无法包装set。你能做的最好的就是:

function def --no-scope-shadowing
    set $argv 
end

这会在调用函数范围中创建一个变量。这与local有所不同:local的作用域是一个块,而上面的作用域是函数。对你的用例来说仍然可能就足够了。