-1

我运行这个脚本

script.sh 'abcdefghijk123456789!@#$%^&' 'aaaa4444ged###'

它应该能够生成一个包含类似

1 1 1 1 15 15 15 15 7 5 23 23 23

有 12 个索引 0 - 11,但我得到的是

1 1 1 1 1 5 1 5 1 5 1 5 7 5 2 3 2 3 2 3

有 20 个索引。我想用给定字符的基数填充一个数组。所以我有一个我们将在$startstringie 中使用的字符列表。 abcc5678%我们可以说 ie 中的每个字符$startstring都 = 对应于 $charsetie 中的一个字符。abcd5678!%. 此代码查找每个$startstringchar 等于$charset的索引号。该信息是我试图在数组中捕获的信息。大多数情况下它都可以工作,除了一个错误,而不是整数 10 存储在 decoded[1] 中,发生的是数字 10 被拆分为 1 和 0,然后两者都放在单独的索引下。因此,我最终得到的不是“1 10 1”和 3 个索引,而是 4 个带有“1 1 0 1”的索引。我确定我只是以错误的方式处理我的变量,但我搜索和搜索,现在我的大脑要爆炸了,所以我来到这里寻求解脱。或者无论如何希望它。有人能告诉我在这个decoded[]数组中插入数字的正确方法吗?

#!/bin/bash
#declare -i decoded
charset=$1              
startstring=$2              


start=$((${#charset}-1))
echo "Setting up CharMap to CharSet"

for i in $(eval echo {0..$start})   
do                  
    echo $i " = " ${charset:$i:1}     
done            

echo "Proving Chars Were Mapped Correctly."

start2=$((${#startstring}))     
start3=$((${#charset}-1))         

for i in $(eval echo {0..$start2})  
do                          

    for p in $(eval echo {0..$start3})          
    do                          

        if [ "${startstring:$i:1}" == "${charset:$p:1}" ]   
            then                            
            echo "found that" ${startstring:$i:1}"=" $p 'from the charmap.'     
            decoded+=$p      #<--### I DONT THINK THIS IS WHAT I NEED ###       
            fi                          
    done                             
done                            
##################Just trying to print my new array#########################
start4=$((${#decoded}-1))               
echo 'Testing the array $decoded'
echo 'the var start4(length of $decoded) = '$start4 
echo 'this number should equal ----------> '$start2            
echo 'Printing out the $decoded array in a for loop'

for c in $(eval echo {0..$start4})          
do                          
   echo  ${decoded[$c]} ###DOESNT WORK LIKE I THOUGHT# also tried echo ${decode:$c:1}                     
done                            
4

1 回答 1

1

decoded+=$p附加 $p 作为字符串,而不是作为数组条目。本质上,您通过将所有索引号附加在一起来创建字符串“11111515151575232323”。(实际上,由于索引绑定问题,我从您的示例中得到“00001414141464322222227”。我会让您担心...)

要将解码后的值存储为数组,decoded请在循环之前设置为空数组,然后使用decoded+=("$p")添加$p为元素:

decoded=()  # create an empty array
for i in $(eval echo {0..$start2})  
do                          
  for p in $(eval echo {0..$start3})            
  do    
    if [ "${startstring:$i:1}" == "${charset:$p:1}" ]   
    then                            
      echo ${startstring:$i:1} "=" $p           
      decoded+=("$p")  # append $p as a new array element
    fi                          
  done                           
done

然后,要获取数组的大小(而不是字符串长度),请使用${#decoded[@]}

start4=$((${#decoded[@]}-1))
于 2013-06-15T23:02:08.893 回答