2011-09-07 62 views
1

我有以下代码:访问一个数组项由索引在bash

PROJECT_TYPES="iPad iPhone" 
ANT_TARGET_NAMES="ipadf ipaf" 

INDEX=0 

for PROJECT_TYPE in $PROJECT_TYPES; do 

echo "${PROJECT_TYPE} => ${ANT_TARGET_NAMES[$INDEX]}" 

let "INDEX++" 
done 

这将显示下列行:

iPad => ipadf ipaf 
iPhone => 

如何更改代码,以便它显示:

iPad => ipadf 
iPhone => ipaf 

???

在此先感谢

迈克

+1

'foo =“bar baz”'创建一个带有“bar baz”内容的字符串。在某些情况下,由于字符串被插入的方式(空白分割),字符串可以被分割成序列,但它们不是列表。 – Daenyth

回答

2

做到这一点,正确的方法是:

INDEX=0 
PROJECT_TYPES=(iPad iPhone) 
ANT_TARGET_NAMES=(ipadf ipaf) 

for PROJECT_TYPE in ${PROJECT_TYPES[*]} 
do 
echo "${PROJECT_TYPE} => ${ANT_TARGET_NAMES[$INDEX]}" 
let "INDEX++" 
done 
1

庆典4具有关联数组,所以你可以写:

declare -A targets=([iPad]=ipadf [iPhone]=ipaf) 
for project_type in "${!targets[@]}"; do 
    printf "%s => %s\n" "$project_type" "${targets[$project_type]}" 
done 

否则,在ennuikiller的答案中声明两个数组,但我会直接遍历索引

projects=(iPad iPhone) 
targets=(ipadf ipaf) 
for ((i=0; i < ${#projects[@]}; i++)); do 
    printf "%s => %s\n" "${projects[$i]}" "${targets[$i]}" 
done 
+0

谢谢,但我在这里有3 – Mike