シェルスクリプトのFlameゲームに関する質問

シェルスクリプトのFlameゲームに関する質問

シェルスクリプトを使用して火のゲームを作成しようとしています。名前を2つ持ってきて名前をまとめました。私のコードは次のとおりです

var=$(j=1;for((i=0;i<${#name1Low};i++));do echo "${name1Low:i:j}";done |sort|tr -d '\n') #sorted name1
var1=$(j=1;for((k=0;k<${#name2Low};k++));do echo "${name2Low:k:j}";done |sort|tr -d '\n') #sorted name2

すべてを下げようとする

if [[ $name1 =~ ^[a-zA-Z]+$ && $name2 =~ ^[a-zA-Z]+$ ]]
then
    name1Low=$(echo $name1 | tr '[[:upper:]]' '[[:lower:]]')
    name2Low=$(echo $name2 | tr '[[:upper:]]' '[[:lower:]]')
fi

同じ文字を削除するには、次の手順を実行します。

var2=$(diff <(fold -w1 <<< "$var") <(fold -w1 <<< "$var1")| awk '/[<>]/{printf $2}') #checking for differernt characters using diff and folding using fold to newline after every 1 character (fold -w1)

今私が直面している実際の問題はまさにflamesその部分です。さまざまな文字列の長さを確認するためにループを実行しており、その場所または反復にあるすべての文字を削除できます。

flames()
{
    echo "$word ${#word}"
    size=`echo ${#var2}`
    
    for((i=0;i<${#word};i++))
    do
        echo  " ${word:$i:1}"

        if [[ $i == $size ]]
        then
            cha=`echo ${word:$i:1}`
            word1=`echo ${word//$cha/}`
        fi
    done
    
    word=`echo $word1`
    echo "$word ${#word}"
}

それがすることは、sizeがvalueに等しくなるまで機能するだけですi。後で1文字だけ残るまで確認して削除する方法を理解できませんか?

while [ ${#word} -ne 1 ]
do
    flames
done

上記の部分は無限に実行されます。実際にパラメータ拡張を実行するよりも優れた他の方法はありますか?

関連情報