Tengo algunas preguntas. Tengo un problema con un script que se supone que es un simple corrector ortográfico.
Lo que debe hacer es, cuando se encuentra una palabra incorrecta, le pedirá al usuario que ingrese la ortografía correcta de la palabra, si el usuario ingresa la ortografía correcta, luego mostrará la palabra corregida junto con la palabra incorrecta hacia abajo. a continuación (después de leer todas las palabras). Pero, si el usuario simplemente presiona Enter, entonces tomará la palabra como la ortografía correcta y la colocará en ~./memory, de modo que si se ejecuta nuevamente, pasará por alto esta palabra.
A partir de ahora, la ortografía correcta/incorrecta de las palabras no se muestra y no se "recuerda" nada en ~./memoria. Y para ser honesto, no estoy muy seguro de por qué.
#! /bin/bash wrongWords=`aspell list < $1` touch ~/.memory for wrongWord in $wrongWords do echo $wrongWord "is mispelled." read -p "Press ""Enter"" to keep this spelling, or type a correction here: " newWord if [ "$newWord" = "" ] then echo "$newWord" >> ~/.memory fi done printf "%-20s %-20s \n Mispelled: Corrections:" printf "\n $wrongWord $newWord"Edité partes delicadas de su secuencia de comandos, que son una buena suposición para tratar de encontrar el problema real. Combiné ligeramente mi propia lógica en esto, pero sin mucho cuidado. Adjunto el script editado a esta pregunta con la esperanza de que sea un buen paso para encontrar su problema, y le sugiero que lea más sobre los siguientes temas:
Los tres enlaces anteriores se tomaron de esta Guía de Bash, que es una de las principales y únicas fuentes para aprender Bash.
También me gustaría recomendarle que use ShellCheck para verificar sus scripts cuando sea necesario en el futuro.
Guión editado. No necesariamente correcto.
#! /bin/bash # This script should be checked before use. # It is not necessarily correct. wrong_words=() new_words=() while read -r ww; do printf '%s is mispelled.\n' "$ww" wrong_words+=("$ww") read -rp "Press \"Enter\" to keep this spelling, or type a correction here: " nw # User provided a correction to $ww if [[ $nw ]]; then printf 'User corrected %s to %s\n' "$ww" "$nw" new_words+=("$nw") else printf 'User decided to keep the spelling of %s even though it was detected to be wrong.\n' "$ww" fi done < <(aspell list < "$1") # Saving new words to ~/.memory_words printf '%s\n' "${new_words[@]}" >> ~/.memory_words # Displaying info. Not necessarily useful. printf 'New word: %s\n' "${new_words[@]}" printf 'Wrong word: %s\n' "${wrong_words[@]}" Las palabras nuevas se guardan en la matriz new_words . Las palabras incorrectas se wrong_words en la matriz de palabras incorrectas. Al final del script, la matriz new_words se agrega al archivo ~/.memory_words .