我知道这对于编写脚本来说几乎太复杂了,但请耐心等待。
我知道如何声明数组:
arr=(hello world)
echo ${arr[1]} # "world"
我知道你可以在bash中使用哈希映射:
declare -A map=([hello]=world [foo]=bar)
echo ${map[hello]} # "world"
但是你可以在bash中使用数组作为值的哈希映射吗?我已经尝试了几种语法,但通常我得到一个哈希映射,其中有空格分隔的字符串列表作为与哈希关联的值
编辑:
示例:我想为cmdline工具toolNew
编写适配器toolOld
。两者都打印出一些有关系统的信息。
toolOld
可以使用九个不同的参数a1
,a2
,a3
,b1
,...或c3
想简化。
即。 toolNew
只需要三个不同的参数a
,b
或c
。
(imo)最干净的方法是拥有一个功能
toolNew() {
newArgument="$1"
for argument in "${argumentMap[newArgument][@]}"; do
toolOld "$argument"
done
}
答案 0 :(得分:0)
如果您使用的是最新版本的bash,可以使用以下函数进行模拟:
helloworld
,foobar
...)。declare -n
)来引用它们。示例:
declare -A map=([hello]=world [foo]=bar)
function set_entry ()
{
local key="$1"
local val="${map[$1]}"
declare -n entry="${key}${val}"
entry[$2]=$3
}
get_entry ()
{
local key="$1"
local val="${map[$1]}"
declare -n entry="${key}${val}"
echo "${key}${val}[$2]=${entry[$2]}"
}
declare -a helloworld=( 0 1 2 )
declare -a foobar=( 3 4 5 )
然后:
$ get_entry hello 1
helloworld[1]=1
$ get_entry foo 0
foobar[0]=3
$ set_entry foo 0 7
$ get_entry foo 0
foobar[0]=7