Me topé con este comportamiento de zsh cuando uso FreeBSD:
% dd if=/dev/zero bs=1M count=1 of=~/test2
dd: failed to open '~/test2': No such file or directory
Esto realmente me confundió porque lo mismo funciona bien en bash.
Puedo toucharchivos usando tilde en zsh, y luego lsellos:
% touch ~/test2
% ls ~/test2
/home/christoph/test2
Al principio, asumí que zsh no se da cuenta de que viene un camino después, of=por lo que no se expandió ~. Pero los nombres de archivos de autocompletado funcionan bien. De hecho, si usa un nombre de archivo existente, comience su ruta con ~, y luego presione Tab en algún momento, la ruta se expande en el comando que estoy escribiendo.
¿Por qué zsh pasa ~/test2a dd, no /home/christoph/test2?
zsh se comporta igual en Linux. De hecho, ejecuté estos comandos anteriores y copié sus resultados en una máquina Linux.

$HOMElugar de~.Respuestas:
~se expande solo en unos pocos contextos . POSIX, para losshmandatos estándarecho a=~a la salidaa=~(mientras que exige~expandirsea=~solo).zshsin embargo, tiene unamagicequalsubstopción que puede usar para~expandirse=incluso si no está en asignaciones o argumentos a lasexport/typeset... pseudo-palabras clave.Entonces:
Tenga en cuenta que
bash, cuando no está en POSIX /shmodo, se expande~enword=~pero sólo cuando lo que está en el lado izquierdo de la=apariencia como un literal sin comillasbashnombre de la variable (independientemente de si está en argumentos atypeset/declare/exporto cualquier otro comando):fuente