Я наткнулся на это поведение Zsh при использовании FreeBSD:
% dd if=/dev/zero bs=1M count=1 of=~/test2
dd: failed to open '~/test2': No such file or directory
Это действительно смутило меня, потому что то же самое прекрасно работает в bash.
Я могу touchфайлы, используя тильду в Zsh, а затем lsих:
% touch ~/test2
% ls ~/test2
/home/christoph/test2
Сначала я предположил, что zsh не понимает, что после этого идет путь, of=поэтому он не расширяется ~. Но автозаполнение имен файлов работает просто отлично. Фактически, если вы используете существующее имя файла, начинаете его путь с ~, а затем нажимаете Tab в какой-то момент, путь расширяется в набираемой мной команде.
Почему zsh переходит ~/test2на ddнет /home/christoph/test2?
Zsh ведет себя так же в Linux. Фактически, я выполнил эти команды выше и скопировал их результаты на машине Linux.
$HOMEвместо~.