如何从 zsh 函数返回关联数组?
我试过:
creatAARR() {
declare -A AARR=([k1]=2 [k2]=4)
return $AARR
}
creatAARR
Run Code Online (Sandbox Code Playgroud)
但我收到错误:
creatAARR:return:2: too many arguments
Run Code Online (Sandbox Code Playgroud)
正确的方法是什么?
编辑: 我将输出捕获到标准输出,就像@chepner建议的那样,但新变量的行为似乎不像关联数组:
creatAARR() {
declare -A AARR=([k1]=2 [k2]=4)
echo "$AARR"
}
declare -A VALL
NEW_ARR=$(creatAARR)
echo "$NEW_ARR" # 2 4
echo "k1: $NEW_ARR[k1]" # prints just k1:
return
Run Code Online (Sandbox Code Playgroud)
有什么建议么?
return仅接受整数并设置函数的退出状态。
Shell 命令实际上不能返回值。如果您想将信息传递给函数的调用者,您可以使用以下几个选项:
\nprint返回值,但这取决于您正确格式化输出以及调用者正确解析它。对于关联数组,有很多种可能会出错;我不建议\xe2\x80\x99 这样做。$REPLY为标量值或$reply数组。不幸的是,没有传递关联数组的约定。当然,您可以将键值对简单地作为非关联数组中的元素$reply,然后让调用者将其转换为或将其包装在关联数组中,但这会打破约定,因此可能会违反您的调用者\的期望。您可以使用最后一种方法,如下所示:
\n% creatAARR() {\n # Restrict $name to function scope.\n local name=$1\n\n # Delete $1, so $@ becomes the other args.\n shift\n\n # Assign elements to array. \n set -A "$name" "$@"\n}\n% typeset -A AARR=() # Declare assoc. array\n% creatAARR AARR k1 2 k2 4\n% typeset -p1 AARR # Print details\ntypeset -A AARR=( \n [k1]=2 \n [k2]=4 \n)\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1143 次 |
| 最近记录: |