我想这样做:
foo=( )
foo[0]="bar"
foo[35]="baz"
for((i=0;i<${#foo[@]};i++))
do
echo "$i: ${foo[$i]}"
done
# Output:
# 0: bar
# 1:
然后我尝试通过它循环使用for in:
foo=( )
foo[0]="bar"
foo[35]="baz"
for i in ${foo[@]}
do
echo "?: $i"
done
# Output:
# ?: bar
# ?: naz
但这里我不知道下标值。
我知道你可以
foo=( )
foo[0]="bar"
foo[35]="baz"
declare -p foo
# Output:
# declare -a foo='([0]="bar" [35]="baz")'
但是,你不能用另一种方法吗?
在bash 4中,你可以使用关联数组:
declare -A foo
foo[0]="bar"
foo[35]="baz"
# for Zsh, change this to: for key in "${(k)foo[@]}"
for key in "${!foo[@]}"
do
echo "key: $key, value: ${foo[$key]}"
done
# output
# $ key: 0, value bar.
# $ key: 35, value baz.
在bash 3中,这是有效的(在zsh中也有效):
map=( )
map+=("0:bar")
map+=("35:baz")
for keyvalue in "${map[@]}" ; do
key=${keyvalue%%:*}
value=${keyvalue#*:}
echo "key: $key, value $value."
done
在bash 4中,你可以使用关联数组:
declare -A foo
foo[0]="bar"
foo[35]="baz"
# for Zsh, change this to: for key in "${(k)foo[@]}"
for key in "${!foo[@]}"
do
echo "key: $key, value: ${foo[$key]}"
done
# output
# $ key: 0, value bar.
# $ key: 35, value baz.
在bash 3中,这是有效的(在zsh中也有效):
map=( )
map+=("0:bar")
map+=("35:baz")
for keyvalue in "${map[@]}" ; do
key=${keyvalue%%:*}
value=${keyvalue#*:}
echo "key: $key, value $value."
done