Parameters 在函数中使用与特殊参数同名的局部参数
由于我喜欢使用描述性参数名,所以我经常尝试使用Zsh本身已经使用过的变量名 由于它在过去给我带来了麻烦,我现在将脚本包装在一个以脚本命名的主函数中。然后我使用Parameters 在函数中使用与特殊参数同名的局部参数,parameters,zsh,Parameters,Zsh,由于我喜欢使用描述性参数名,所以我经常尝试使用Zsh本身已经使用过的变量名 由于它在过去给我带来了麻烦,我现在将脚本包装在一个以脚本命名的主函数中。然后我使用local关键字声明所有本地参数 但有些参数似乎不允许在本地范围内隐藏它们: 函数foo { 本地命令=(baz栏) 本地状态=0 echo${(F)命令} echo$状态 } 这里,使用本地命令参数代替特殊参数 但是由于status参数是只读的,我得到了以下错误: zdm:6:只读变量:状态 我认为local关键字允许在本地范围内使用特
local
关键字声明所有本地参数
但有些参数似乎不允许在本地范围内隐藏它们:
函数foo
{
本地命令=(baz栏)
本地状态=0
echo${(F)命令}
echo$状态
}
这里,使用本地命令
参数代替特殊参数
但是由于status
参数是只读的,我得到了以下错误:
zdm:6:只读变量:状态
我认为
local
关键字允许在本地范围内使用特殊参数,但不会改变其声明方式。要在本地范围内使用特殊参数名称,必须使用字体的-h
标志显式隐藏它
排版-h状态
要将其声明为本地,请使用也支持该标志的local
关键字:
local-h状态
您还可以使用zsh/param/private
模块中的private
关键字:
zmodload zsh/param/private
私人-h身份
-h
标志
从Zsh手册:
-h
隐藏:仅适用于特殊参数(在Shell设置的参数表中标记为
的参数),以及与特殊参数同名的本地参数,但对其他参数无害
具有此属性的特殊参数在局部设置时将不会保留其特殊效果。因此,在typeset-h PATH
之后,包含typeset PATH
的函数将创建一个普通的局部参数,而不具有PATH的常规行为
或者,局部参数本身可以被赋予该属性;因此,在函数typeset中-h PATH
创建一个普通的局部参数,并且特殊的PATH参数不会以任何方式改变
还可以使用typeset+h special
创建本地参数,其中special的本地副本将保留其特殊属性,而不管是否具有-h属性
从shell模块加载的全局特殊参数(当前在zsh/mapfile和zsh/parameter中)会自动赋予-h
属性,以避免名称冲突
局部参数
有关更易于理解的解释,请参阅Zsh手册页面中关于