Ulr*_*rik 5 arrays bash pointers associative-array key
在这个非常简单的示例中,我需要解决数组元素的键和值:
declare -A writer
writer[H.P.]=Lovecraft
writer[Stephen]=King
writer[Clive]=Barker
writer[Jack]=Ketchum
for i in ${!writer[@]}
do
echo "$i ${writer[$i]}"
done
fullname()
{
pointer=$1[@]
for i in "${!pointer}"
do
echo "? $i"
done
}
fullname writer
Run Code Online (Sandbox Code Playgroud)
该函数必须以与之前的示例循环相同的格式显示输出,并且它应该接收数组名称,键列表或值,所有这些都是我尝试过的,但没有成功.任何建议都非常感谢.
gni*_*urf 16
从Bash 4.3开始,declare有一个-n用于定义引用的标志(这与C++中的引用相当).此标志极大地简化了您的问题:
fullname() {
declare -nl pointer="$1"
for i in "${!pointer[@]}"
do
echo "${pointer[$i]} $i"
done
}
Run Code Online (Sandbox Code Playgroud)
如果你在哈希的键中有空格或有趣的符号(与接受的答案不同),那将是安全的.
indir_keys() {
eval "echo \${!$1[@]}"
}
indir_val() {
eval "echo \${$1[$2]}"
}
fullname()
{
pointer=$1
for i in $(indir_keys $pointer)
do
echo "$i $(indir_val $pointer $i)"
done
}
Run Code Online (Sandbox Code Playgroud)
给出:
Jack Ketchum
Clive Barker
Stephen King
H.P. Lovecraft
Run Code Online (Sandbox Code Playgroud)