String BASH-字符串名称包含变量的字符串赋值

String BASH-字符串名称包含变量的字符串赋值,string,bash,String,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 ar

我一直在疯狂地试图弄明白这个语法…有人能给我指出正确的方向吗

#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"

将BASH间接寻址用作:

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

替代解决方案:不要尝试动态创建变量名,而是使用数组(例如,
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

所以我尝试了这个解决方案,但仍然存在数组名中包含变量的问题。我声明了一个数组,但这里有一个问题: