Cela n'a rien à voir avec les options de l'obus. Cela dépend plutôt de ce que shebang que vous avez dans votre fichier exécutable.
Lorsque vous exécutez un script en tant qu'exécutable (au lieu de source
-ou en l'exécutant comme une fonction), il s'exécute dans un sous-shell séparé et non dans votre shell de niveau supérieur. Un sous-shell hérite de l'environnement de son parent (c'est-à-dire, export
), mais pas les options du shell. Au lieu de cela, le shebang dicte dans quel shell il s'exécute et avec quelles options.
Si le shebang est #!/bin/zsh
il lancera un sous-shell Zsh avec les options par défaut, puis lira les commandes à partir de /etc/zshenv
y $ZDOTDIR/.zshenv
et ensuite à partir de votre script.
De même, si le shebang est #!/bin/bash
votre script s'exécutera en fait dans Bash, et non dans Zsh.
Enfin, si le shebang est #!/bin/sh
cela dépend de votre système d'exploitation. Sous MacOS, il existe un lien symbolique /private/var/select/sh
qui pointe vers l'exécutable shell à utiliser lorsque le shebang est #!/bin/sh
. (Type man 1 sh
pour plus d'informations). Par défaut, cette coquille est Bash, et non Zsh, même si vous avez changé votre shell de connexion pour Zsh. La seule façon de le changer est de changer ce lien symbolique.
Mais même si vous faites /private/var/select/sh
pointent vers l'exécutable Zsh, si vous exécutez votre script avec un #!/bin/sh
shebang, Zsh ne fonctionnera pas en "mode natif". Au lieu de cela, il s'exécutera en sh
mode d'émulation, qui permet de basculer entre un certain nombre d'options qui sont significativement différent des valeurs par défaut de Zsh .
Les parenthèses sont syntaxe de base des globules dans Zsh . Cependant, ils ne sont pas dans Bash. Donc, à mon avis, votre script est en fait exécuté dans Bash, à cause du shebang.
Donc, de toute façon, pour faire court : épargnez vous la peine et ne lancez pas votre script comme un exécutable. Plutôt, ce qui est généralement le plus pratique dans Zsh, c'est d'ajouter le répertoire parent de votre script à votre fichier $fpath
et ensuite autoload
votre script en fonction .