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 touch
archivos usando tilde en zsh, y luego ls
ellos:
% 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 ~/test2
a 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.
$HOME
lugar de~
.Respuestas:
~
se expande solo en unos pocos contextos . POSIX, para lossh
mandatos estándarecho a=~
a la salidaa=~
(mientras que exige~
expandirsea=~
solo).zsh
sin embargo, tiene unamagicequalsubst
opció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 /sh
modo, se expande~
enword=~
pero sólo cuando lo que está en el lado izquierdo de la=
apariencia como un literal sin comillasbash
nombre de la variable (independientemente de si está en argumentos atypeset
/declare
/export
o cualquier otro comando):fuente