我可以在 fish shell 中为 `set -l` 创建一个别名吗?
Can I make an alias for `set -l` in the fish shell?
我在我的 fish 脚本中大量使用 set -l
/set --local
,所以我考虑为它创建一个别名。 local
这个名字似乎很贴切。不幸的是,显而易见的方法不起作用:
function local
set -l $argv
end
这失败了,因为当然,这创建的变量是 local 到 local
函数本身。使用 alias
也不起作用,因为它只是上述功能的(可能是遗留的)shorthand。
有没有什么方法可以在调用范围内创建一个局部变量,而无需做比 local foo 'bar'
更复杂的事情?显然,我可以使 eval (local foo 'bar')
之类的东西起作用,但这会有点违背目的。我愿意接受任何可以使这项工作成功的诡计或技巧,如果存在的话。
恐怕不是,局部变量总是局部于最顶层的作用域,并且没有创建新作用域的情况下无法包装 set
。你能做的最好的是:
function def --no-scope-shadowing
set $argv
end
这会在调用函数范围内创建一个变量。这与 local 有细微的不同:local 的作用域是块,而 above 的作用域是函数。对于您的用例来说仍然足够了。
我在我的 fish 脚本中大量使用 set -l
/set --local
,所以我考虑为它创建一个别名。 local
这个名字似乎很贴切。不幸的是,显而易见的方法不起作用:
function local
set -l $argv
end
这失败了,因为当然,这创建的变量是 local 到 local
函数本身。使用 alias
也不起作用,因为它只是上述功能的(可能是遗留的)shorthand。
有没有什么方法可以在调用范围内创建一个局部变量,而无需做比 local foo 'bar'
更复杂的事情?显然,我可以使 eval (local foo 'bar')
之类的东西起作用,但这会有点违背目的。我愿意接受任何可以使这项工作成功的诡计或技巧,如果存在的话。
恐怕不是,局部变量总是局部于最顶层的作用域,并且没有创建新作用域的情况下无法包装 set
。你能做的最好的是:
function def --no-scope-shadowing
set $argv
end
这会在调用函数范围内创建一个变量。这与 local 有细微的不同:local 的作用域是块,而 above 的作用域是函数。对于您的用例来说仍然足够了。