Por que não?
$ rm -f "temp.txt"
Assim, você não precisa verificar nem redirecionar a saída de erros.
Às vezes, quando eu quero excluir um arquivo (de dentro de um script), vou apenas excluí-lo em vez de verificar se ele existe primeiro. Então eu faço isso:
$ rm "temp.txt" 2>/dev/null
Em vez disso:
[ -f "temp.txt" ] && rm "temp.txt"
Eu sinto que é perda de tempo verificar se o arquivo existe e retornar um código de saída.
Então, talvez seja mais rápido fazer isso da primeira maneira, especialmente se na maioria das vezes o arquivo estiver presente.
Existem outras vantagens (ou desvantagens) para fazer isso de uma forma ou de outra?
Estou errado em pensar que será mais rápido?
Existem dois casos:
O arquivo a ser removido deverá existir. Em tal situação, o script não deve ignorar o erro, mas deve lidar com a situação adequadamente. Por exemplo, o sistema de arquivos no qual o arquivo deveria ser criado está cheio ou o processo que deveria criar o arquivo falhou, ou o que quer que seja.
O arquivo a ser removido pode existir ou não, e nesse caso não há motivo para testar sua existência.