如何在zsh 5.9中通过nameref创建指定名称的数组函数?
解决Zsh 5.9中无需eval创建指定名称数组的问题
可以用**nameref(名称引用)**来实现,这是Zsh 5.0+支持的特性,完全不需要依赖eval。
实现代码
creator() { nameref arr=$1 arr=(a b c) }
使用示例
调用函数生成目标数组:
creator myarr
验证数组是否正确创建:
# 输出数组第一个元素 echo $myarr[1] # 输出数组第二个元素 echo $myarr[2] # 输出数组第三个元素 echo $myarr[3]
原理说明
nameref arr=$1将函数接收的变量名(如myarr)与本地变量arr绑定,后续对arr的赋值操作会直接作用于目标变量。- 你之前使用
${(P)name::=(a b c)}失败,是因为${(P)}仅适用于间接引用标量变量,会把括号包裹的内容解析成单个字符串赋值,而非数组元素。
内容的提问来源于stack exchange,提问作者user1934428
相关产品推荐
相关产品推荐

