Eu testei definindo uma das variáveis. Executando este script duas vezes:
while read line; do
md5sum=${line%%" "*}
#md5sum=$(echo $line | awk '{print $1}')
echo "SUM: $md5sum FILE:_$file"
done < manifest.Stuph.180620
primeiro com
md5sum=${line%%" "*}
e depois com
md5sum=$(echo $line | awk '{print $1}')
onde o arquivo "manifest.Stuph.180620" tem 100939 linhas (== aproximadamente 14MiB) deu os seguintes resultados:
Primeira execução (usando a manipulação de strings do bash)
real 0m4.750s
user 0m4.174s
sys 0m0.550s
Segunda execução (usando o pipeline)
real 10m54.255s
user 4m42.257s
sys 7m32.880s
Alguns (como eu) dirão que, se a velocidade é importante, então você não deveria estar mexendo no shell de qualquer maneira, mas às vezes você pode querer ser mais eficiente - não importa qual ambiente você esteja usando para o trabalho .
Observe que fazendo isso:
while read md5sum filename; do
(...etc...)
é ainda mais eficiente do que fazer a atribuição de variável, mas não ao grau de eliminar a construção de substituição de comando / pipe / awk. A coisa que eu acho mais interessante é a diferença entre o desempenho integrado do bash e o uso de comandos externos. Eu serei mais diligente em aprender e usar as coisas sofisticadas!