tldr; o shell está interpretando os caracteres antes de anexar ao arquivo.
echo echo Hello World, "done" >> file.sh
O shell interpreta o " , removendo-os do padrão de echo . Portanto, você precisa fugir deles,
echo echo Hello World, \"done\" >> file.sh
ou, mais simplesmente, coloque tudo em ' .
echo 'echo Hello World, "done"' >> file.sh'
Dito isto, não sei ao certo o que você quer dizer com
to make sure that when I run the file, the terminal doesn't consider the keyword "done"
Um done após um echo não significa nada. O novo script irá imprimir apenas um literal done . Apenas teste!
Da mesma forma, para
echo $num1 plus $num2 is 'expr $num1 + $num2'
o shell interpreta as variáveis e expr antes anexa ao arquivo. Novamente, apenas coloque tudo em ' .
echo 'echo $num1 plus $num2 is 'expr $num1 + $num2'' >> file.sh
Dito isto, não faço ideia por que você gostaria de fazer isso. Apenas use um editor de texto. Vai ser complicado quando você quiser literal ' s no seu script.