쉘 스크립트의 Flame 게임에 대한 질문

쉘 스크립트의 Flame 게임에 대한 질문

쉘 스크립트를 사용하여 불 게임을 만들려고 합니다. 이름 두 개를 가져와서 이름을 정리했어요. 내 코드는 다음과 같습니다

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. 나중에 한 글자만 남을 때까지 확인하고 삭제하는 방법을 이해할 수 없습니까?

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

위 부분은 무한히 실행됩니다. 실제로 매개변수 확장을 수행하는 것보다 더 나은 다른 방법이 있습니까?

관련 정보