鱼壳脚本:添加列表作为函数的参数



我想把一个可变长度的列表作为参数传递到fish脚本中调用和定义的fish函数,类似于我猜$argv是fish脚本顶层的列表。

function main_function
function f --argument xs
echo "called f"
echo $xs     
end
set xs "one" "two" "three";
f $xs
end

调用function --help表示--inherit-variable选项。虽然设置该选项会使f作用域中的xs变量成为完整列表,但它会在定义函数的地方进行哑复制。但是,我需要在调用f时复制变量。

function main_function
set xs "one" "two" "three";
function f --inherit-variable xs
echo "called f"
echo $xs     
end
f $xs
end

正如@可笑ous_fish在评论中提到的,$argv是由任何函数定义的,并且可以在任何函数中使用,而不管它的"级别"如何。所以如果你需要"copy"当函数被调用时,将一个列表放入函数中(相对于定义的),只需将项目作为参数传递,并使用$argv进行访问。

例如:

function outer
set --show argv
set xs "one" "two" "three"
function inner
set --show argv
end
inner $xs
end

不带参数调用outer将返回:

$argv: set in local scope, unexported, with 0 elements
$argv: set in local scope, unexported, with 3 elements
$argv[1]: |one|
$argv[2]: |two|
$argv[3]: |three|

但是调用outer four five size会导致:

$argv: set in local scope, unexported, with 3 elements
$argv[1]: |four|
$argv[2]: |five|
$argv[3]: |six|
$argv: set in local scope, unexported, with 3 elements
$argv[1]: |one|
$argv[2]: |two|
$argv[3]: |three|

每个函数的$argv是不同的,即使它们是嵌套的。

相关内容

  • 没有找到相关文章

最新更新