Je suis tombé sur ce comportement de zsh lors de l'utilisation de FreeBSD:
% dd if=/dev/zero bs=1M count=1 of=~/test2
dd: failed to open '~/test2': No such file or directory
Cela m'a vraiment dérouté car la même chose fonctionne très bien en bash.
Je peux les touch
fichiers en utilisant tilde dans zsh, puis ls
eux:
% touch ~/test2
% ls ~/test2
/home/christoph/test2
Au début, j'ai supposé que zsh ne réalisait pas qu'il y avait un chemin après, of=
donc il ne s'est pas développé ~
. Mais la saisie automatique des noms de fichiers fonctionne très bien. En fait, si vous utilisez un nom de fichier existant, commencez son chemin par ~
, puis appuyez sur Tab à un moment donné, le chemin est développé dans la commande que je tape.
Pourquoi zsh passe-t-il ~/test2
à dd
, non /home/christoph/test2
?
zsh se comporte de la même manière sous Linux. En fait, j'ai exécuté ces commandes ci-dessus et copié leurs sorties sur une machine Linux.
$HOME
place de~
.Réponses:
~
n'est développé que dans quelques contextes . POSIX, pour la sortie dessh
mandats standard (alors qu'il doit être étendu en seul).echo a=~
a=~
~
a=~
zsh
a cependant unemagicequalsubst
option que vous pouvez utiliser pour~
être développée après,=
même si elle n'est pas dans les affectations ou les arguments des pseudo-mots clésexport
/typeset
...Donc:
Notez que
bash
, lorsqu'il n'est pas ensh
mode POSIX / , se développe~
dansword=~
mais uniquement lorsque ce qui se trouve à gauche=
ressemble à unbash
nom de variable littéral sans guillemets (qu'il s'agisse d'arguments detypeset
/declare
/export
ou de toute autre commande):la source