Buongiorno . non Riesco a risolvere un dubbio riguardante la sintassi in uno script bash , a proposito dei caratteri speciali



#!/bin/bash
if test $# -ne 1 ; then
echo "Usage $0 dir"
fi
if ! test -d "$1" ; then
echo "$1 is not a valid directory"
fi

cd "$1"
for i in * ; do
if test -d "$i" ; then
echo "${i}: `ls -1 $i | wc -l` elementi" >> summary.out
elif test -f "$i" ; then
echo "${i}: `head -c 10 $i`" >> summary.out
fi
done


in particolare questo script dovrebbe controllare tutti i file e/o directory in una directory
e nel caso di file stampare su un altro file i primi 10byte
nel caso di directory stamparne il nome e il numero di dir e file contenuti :

i dubbi sono :
echo "${i}: perchè la parentesi graffa?non bastava solo $i ?? e i : ??
che cosa significa echo: i due punti non sono superflui?
perchè mettere un intero comando con `` , es `ls -1 $i | wc -l` ?
per redirigere su file erano necessari gli apici?
il punto e virgola nel if è necessario?

lo script di sopra lanciato da shell mi stampa gli errori di file not found , su file lunghi e con spazi nei nomi


qual'è la differenza con questa versione

#!/bin/bash
if test $# -ne 1 ; then
echo "Usage $0 dir"
fi
if ! test -d "$1" ; then
echo "$1 is not a valid directory"
fi

cd "$1"
for i in * ; do
if test -d "$i" ; then
echo "$i" `ls -1 $i | wc -l` elementi >> summary.out
elif test -f "$i" ; then
echo "$i": `head -c 10 $i` >> summary.out
fi
done


??

la fonte da cui imparo mi pare discordare con altre nel web , dunque spero che qualcuno di voi possa aiutarmi. grazie