在 bash 中,为什么 "local" 关键字传递函数参数?



在bash中,似乎您可以使用"local"关键字来引用函数的输入参数。这是记录在案的行为吗?如果是这样,我在哪里可以阅读它?

$ f() { local g; for g; do echo $g; done; }
$ f foo bar
foo
bar

据 https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html

本地 [选项] 名称 [=值] ... 对于每个参数,将创建一个名为 name 的局部变量,并为其分配值。

但是如果没有提供其他值,我看不到将函数的 $1、$2 等分配给变量。

我更熟悉这样做:

for g in "$@"

这两种方式更好吗?更交叉兼容?

我在 macOs 10.14 上的狂欢:

GNU bash,版本 3.2.57(1(发布(x86_64-apple-darwin18( 版权所有 (C( 2007 自由软件基金会。

这与local命令无关。使用不带in子句的for命令时,它默认循环访问位置参数。

for g

相当于

for g in "$@"

这是在 Bash 手册中

如果"in words">不存在,则for命令会针对设置的每个位置参数执行一次命令,就像指定了in "$@"一样(请参阅特殊参数(。

最新更新