O caso de uso em que posso pensar -nt
seria atualizar um arquivo se for muito antigo ou se não existir. Bash lida com isso muito bem:
$ bash -c 'touch 2.txt; sleep 1; touch 1.txt; [ 1.txt -nt 2.txt ]; echo $?;
[ 1.txt -nt 3.txt ]; echo $?'
0
0
No entanto, o Dash só funciona conforme o esperado se ambos os arquivos existirem:
$ dash -c 'touch 2.txt; sleep 1; touch 1.txt; [ 1.txt -nt 2.txt ]; echo $?;
[ 1.txt -nt 3.txt ]; echo $?'
0
1
Estou tentando entender a lógica do código Dash. Você pode contornar esse comportamento assim:
$ dash -c 'touch 1.txt; [ ! -f 3.txt ] || [ 1.txt -nt 3.txt ]; echo $?'
0
mas por que isso seria necessário? Por que Dash escolheu essa lógica? Faz sentido ter a lógica Dash em certos casos?
Sua pergunta é bastante opinativa, no entanto, na minha opinião, a lógica do traço faz mais sentido. Se você deseja comparar se um arquivo é mais recente que outro, os dois arquivos existentes devem ser um requisito. Este claramente não é o caso, conforme indicado no manual do bash.
6.4 Expressões Condicionais Bash
Página de manual do traço
Por que os dois arquivos precisam existir? Uma pergunta melhor é por que não? Por que você deseja comparar se o arquivo1 é mais recente que um arquivo inexistente? É apenas uma maneira complicada de testar se o arquivo1 existe. Se você está realmente tentando comparar se um arquivo é mais recente que outro, provavelmente é um problema que deve causar um erro se um desses arquivos estiver ausente.
Faria sentido com outros operadores de comparação?
Comparar um arquivo com um arquivo inexistente é como comparar um inteiro com um valor nulo. Faria sentido se
[[ 1 -gt "" ]]
avaliado como verdadeiro? Bem, bash acha que isso também faz sentido...