-1

このスクリプトを次のように実行します

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

次のようなものを含む配列を生成できるはずです

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

0〜11の12個のインデックスがありますが、私が得るのは

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

20 インデックス付き。特定の文字のベース番号を配列に入力したいと考えています。$startstringだから私は私たちがie で使用する文字のリストを持っています. 内のすべての文字は、 ie内の 1 つの文字に対して = abcc5678%であると言えます。. このコードは、各文字が何に等しいかを見つけます$startstring$charsetabcd5678!%$startstring$charsetのインデックス番号。その情報は、私が配列でキャプチャしようとしているものです。数字の 10 が decoded[1] に格納されるのではなく、数字の 10 が 1 と 0 に分割され、両方が別々のインデックスの下に置かれるというバグを除いて、ほとんどの場合は機能します。したがって、「1 10 1」と 3 つのインデックスの代わりに、「1 1 0 1」の 4 つのインデックスになります。変数を間違った方法で処理しているだけだと確信していますが、検索して検索したところ、脳が爆発するので、安心のためにここに来ました。またはとにかくそれを願っています。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 に答える