2013-10-21 48 views
0

我一直在疯狂试图找出这种语法...任何人都可以指出我的方向正确吗?BASH-字符串赋值,包含一个变量的字符串名称

#Counter to iterate through the ENTIRE affinity array 
affArrayCtr=0 

#Counter to go through 4 cores for EACH pid  
affCtr=0 

#Counter to go through each PID to keep track of which PID we are on 
pidCtr=0 

#Affinity array size 
affArraySz=${#affConfigArray[@]} 

#Each core's new affinity, strings initialized to empty 
pid0Aff= 
pid1Aff= 
pid2Aff= 
pid3Aff= 

while [ $affArrayCtr -lt $affArraySz ]; do 

     while [ $affCtr -lt $NUMCORES ]; do 

       if [[ ${affConfigArray[$affArrayCtr]} -eq 1 ]]; then 
         tempAff0="$(pid"${pidCtr}"Aff)" 
         tempAff1=$(($affArrayCtr % 4)) 
         pid${pidCtr}Aff="$tempAff0 $tempAff1" 

         affCtr=$(($affCtr + 1)) 
         affArrayCtr=$(($affArrayCtr + 1)) 
       fi 

       affArrayCtr=$(($affArrayCtr + 1)) 
       affCtr=$(($affCtr + 1)) 
     done 

     affCtr=0 
     pidCtr=$(($pidCtr + $NUMCORES)) 


done 

echo "Final affinity strings before adding the commas" 
echo $pid0Aff 

的问题是,我尝试分配tempAff0="$(pid"${pidCtr}"Aff)",当我尝试做最后的拼接pid${pidCtr}Aff="$tempAff0 $tempAff1"

我试图使这里我使用数组而不是字符串的变化,但是,我仍然有我的数组名称中包含变量实际上是一个问题:

#Each core's new affinity, arrays initialized to empty 
declare -a pid0Aff 
declare -a pid1Aff 
declare -a pid2Aff 
declare -a pid3Aff 

while [ $affArrayCtr -lt $affArraySz ]; do 

     affCtr=0 

     while [ $affCtr -lt $NUMCORES ]; do 

       if [[ ${affConfigArray[$affArrayCtr]} -eq 1 ]]; then 

         tempAff=$(($affArrayCtr % 4)) 
         pid${pidCtr}Aff[${#pid${pidCtr}Aff[*]}]="$tempAff" 

         affCtr=$(($affCtr + 1)) 
         affArrayCtr=$(($affArrayCtr + 1)) 
       fi 

罪魁祸首是在这里我在哪里要追加到数组:

pid${pidCtr}Aff[${#pid${pidCtr}Aff[*]}]="$tempAff" 

回答

0

使用bash间接为:

echo "${!tempAff0} ${!tempAff1}" 
1

替代解决方案:不是尝试动态创建变量名称,而是使用数组(例如,pidAff)替换单个变量pid0Aff,pid1Aff等,并使用pidCtr为其编制索引。

这应该把你在正确的轨道上:

#! /bin/bash 
pidAff[0]='zero' 
pidAff[1]='one' 
pidAff[2]='two' 
pidAff[3]='three' 

pidAffArrayCtr=0 
pidAffArraySz=4 

while [ $pidAffArrayCtr -lt $pidAffArraySz ]; do 
    echo "pidAff of $pidAffArrayCtr is ${pidAff[$pidAffArrayCtr]}" 
    pidAffArrayCtr=$(($pidAffArrayCtr + 1)) 
done 
+0

所以我尝试这个解决方案,和我仍然有我的数组名具有可变的问题。我声明一个数组,并在这里有一个问题: –

+0

@calvarado请参阅编辑版本。 – CPerkins