![typeset -A 在脚本中给出错误](https://linux22.com/image/41621/typeset%20-A%20%E5%9C%A8%E8%84%9A%E6%9C%AC%E4%B8%AD%E7%BB%99%E5%87%BA%E9%94%99%E8%AF%AF.png)
我在脚本中使用关联数组,因此我曾经通过
typeset -A <array_name>
命令,并且在 bash 提示符下运行良好
但是当我在脚本中使用它时,出现以下错误
typeset: -A: invalid option typeset: usage: typeset [-afFirtx] [-p] name[=value] ...
我也可以接受替代解决方案。
旁注:我尝试了 typeset -a 但它声明了一个索引数组。但我想要一个关联数组。
答案1
这是 Bash 3 for 生成的错误typeset -A
。关联数组在 Bash 4 中添加了,并且不在Bash 3.2 及更早版本。
您的脚本运行时的 Bash 版本似乎与您用作 shell 的版本不同。如果在这两种情况下您都在同一台计算机上,则您安装了多个版本,并且可能可以选择具有不同路径的版本。如果您在另一台机器上运行该脚本,您也许能够安装更新的版本,但否则您就无法获得 Bash 的直接支持。
zsh
从更旧的版本开始就支持关联数组,因此如果您有可用的功能,您可能可以移植您的脚本而无需太多工作。如果您无法做到这一点,您可以使用常规数组 和 来伪造它grep
,或者使用${!prefix@}
以及一组普通变量,在旧版 Bash 中可用。${!prefix@}
扩展为名称以 开头的所有变量的名称prefix
,您可以将其与多个变量结合使用prefix_key1
,prefix_another
以获得关联数组的大部分行为。