- Codice: Seleziona tutto
for nomefile in $guardia_for # esegue la rinomina sui file
# il for considera gli elementi della lista come separati dallo spazio: ogni parola viene considerata come un file diverso...
do # rinomina, se possibile, il file $nomefile con la nuova estensione $est_dest
temp_name="$temp_name $nomefile" # concateno i nomi (con questo metodo aggiungo uno spazio prima del nome del file)
temp_est="${temp_name:(-${#est_orig})}"
echo "$temp_est == $est_orig"
if [ "$temp_est"=="$est_orig" ] # sembra che restituisca sempre vero...
then
temp_name=${temp_name#" "} # rimuovo lo spazio iniziale
mv "$temp_name" "${temp_name%.$est_orig}.$est_dest"
temp_name=""
else #non finisce con estensione, bisogna iterare
echo "$temp_name non ha estensione"
continue
fi
done
Il problema si presente nell'if. Quando arrivo in questa parte del programma, $nomefile contiene la lista dei file da processare. Il problema è che la bash considera come separatore per le liste il carattere "spazio", e quindi i nomi di file composti da più parole vengono considerati come file diversi, un file per parola. L'if deve verificare se la parola in esame termina effettivamente con un'estensione. Se così è, allora è un file e va rinominato, altrimenti a questa parola si aggiungono le parole seguenti fino a completare il nome del file. Il guaio è che il confronto non funziona. Devo confrontare semplicemente le due stringhe $temp_est e $est_orig e vedere se sono uguali, ma anche se sono diversi il risultato è sempre e comunque che sono uguali. Le stringhe sono corrette e contengono i caratteri appropriati. L'unico problema è nell'if... Qualcuno può suggerirmi un metodo per confrontare decentemente le stringhe di caratteri in bash??? Ho letto e riletto Advance Bash Scripting ma non ho risolto nulla



questa parte funziona 
avevo provato tutte le sintassi di confronto, ma mi dava sempre e comunque lo stesso errore...