Contraste:
$ watch -n 1 "echo $(date)"
Every 1.0s: echo Sat Apr 27 03:10:50 CEST 2013
$ watch -n 1 'echo $(date)'
Every 1.0s: echo $(date)
O que você fez foi executar echo "($ls DirFlat |wc -l)*100/$FileNum"|bc
e date
, substituir a saída de cada comando pelo comando shell watch -n 100 "echo $(…) % $(…)"
e executá-lo. Você precisa impedir a expansão do comando no shell pai e, em vez disso, passá-lo como uma string para watch
para que ele seja executado. Esta é uma simples questão de usar aspas simples ao redor do comando, em vez de aspas duplas.