我在我的鱼脚本中自由使用set -l
/ set --local
,所以我考虑为它做一个别名。名称local
似乎很合适。不幸的是,显而易见的方法不起作用:
function local
set -l $argv
end
这失败了,因为当然,它创建的变量是 local 到local
函数本身。使用alias
也不起作用,因为它只是上述功能的一种(可能是传统的)简写。
有没有什么方法可以在调用范围内创建一个局部变量而不会做比local foo 'bar'
更复杂的事情?显然我可以做出像eval (local foo 'bar')
这样的工作,但那会破坏目的。我愿意接受任何可以使这项工作的技巧或黑客,如果存在的话。
答案 0 :(得分:2)
我不敢,局部变量总是最顶层范围的本地变量,并且在没有创建新范围的情况下无法包装set
。你能做的最好的就是:
function def --no-scope-shadowing
set $argv
end
这会在调用函数范围中创建一个变量。这与local有所不同:local的作用域是一个块,而上面的作用域是函数。对你的用例来说仍然可能就足够了。