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.