Mi sono imbattuto in questo comportamento di zsh quando ho usato FreeBSD:
% dd if=/dev/zero bs=1M count=1 of=~/test2
dd: failed to open '~/test2': No such file or directory
Questo mi ha davvero confuso perché la stessa cosa funziona bene a Bash.
Posso touchfile usando tilde in zsh, e poi lsloro:
% touch ~/test2
% ls ~/test2
/home/christoph/test2
Inizialmente, supponevo che zsh non si rendesse conto che dopo c'è un percorso, of=quindi non si è espanso ~. Ma i nomi dei file completati automaticamente funzionano bene. In effetti, se usi un nome file esistente, inizia il suo percorso con ~, e poi premi Tab ad un certo punto, il percorso si espande nel comando che sto digitando.
Perché il zsh passa ~/test2a dd, non /home/christoph/test2?
zsh si comporta allo stesso modo su Linux. In effetti, ho eseguito questi comandi sopra e copiato i loro output su una macchina Linux.
$HOMEinvece di~.