Sto cercando di trovare il percorso con il maggior numero di caratteri in esso. Ci potrebbero essere modi migliori per farlo. Ma mi piacerebbe sapere perché questo problema si verifica.Variabili di shell impostate all'interno del ciclo while non visibili al di fuori di esso
LONGEST_CNT=0
find samples/ | while read line
do
line_length=$(echo $line | wc -m)
if [[ $line_length -gt $LONGEST_CNT ]]
then
LONGEST_CNT=$line_length
LONGEST_STR=$line
fi
done
echo $LONGEST_CNT : $LONGEST_STR
Si ritorna in qualche modo sempre:
0 :
Se stampare i risultati per il debug all'interno del ciclo, mentre i valori sono corretti. Quindi, perché bash non rende queste variabili globali?
Grazie, questo mi ha aiutato molto. – Mark
La soluzione fornita da Dennis funziona, ma si tenga presente che viola la norma POSIX. Prova a 'set -o posix' e lo script non funzionerà! – RobSis
@Robert: la domanda è contrassegnata [bash]. È vero che la sostituzione del processo non è specificata da POSIX. Tuttavia, a meno che la portabilità delle shell solo POSIX sia un problema, non c'è motivo di non utilizzare le funzionalità specifiche di Bash. A proposito, la sostituzione del processo è supportata da ksh e zsh. Tuttavia, non creano una subshell che causa la perdita della variabile. Si noti inoltre che Bash 4.2 ha un'opzione, 'shopt -s lastpipe' che" esegue l'ultimo comando di una pipeline nel contesto corrente della shell "(non una sottotitola) - a meno che il controllo del lavoro non abbia effetto. –