Ce qui a changé et qui devrait poser des problèmes de compatibilité avec des scripts montés avec d’anciennes versions de Fish est que les tentatives d’assignation de valeur (via une unique commande) à plusieurs éléments d’un tableau sont désormais considérées comme invalides ; en d’autres termes, l’usage d’un set tab[1], tab[2] devrait générer le message « erreur de syntaxe. » Pareil pour les tentatives d’accès à l’élément « 0 » d’un tableau ; les têtes derrière le shell ont décidé que les indices des tableaux et listes sont numérotés à partir de 1 sous Fish 3.0, ce, comme c’est le pour des langages comme Visual Basic. L’un des plus gros changements aurait été le retrait de l’opérateur de redirection (^) et du caractère générique (?), mais ce n’est qu’une question de temps puisque l’équipe de développement les a fait apparaître sur la liste des dépréciations. Ces fonctionnalités vont donc tirer leur révérence dans une prochaine release.
Le shell s’est amélioré du point de vue de la syntaxe. À défaut d’écrire and, or ou not dans le cadre de la gestion d’opérations logiques, le développeur peut désormais faire usage de &&, || et ! comme en langage C. Cette nouvelle disposition est destinée à faciliter la migration depuis des shells compatibles POSIX. En sus, la nouvelle mouture permet l’utilisation des variables comme commandes. Fish 3.0 introduit une liste d’une dizaine de changements en ce qui concerne les nouvelles commandes et les nouveaux éléments de syntaxe.
Fish est un shell Unix conçu pour être plus interactif et convivial que ses prédécesseurs (bash, zsh, csh, etc.) dans la même famille. La syntaxe de Fish ressemble à celle d’un shell compatible POSIX, mais s’en écarte en beaucoup d’aspects, notamment, ceux pour lesquels ses concepteurs ont estimé que le shell POSIX est mal conçu. Lors de la création de scripts complexes avec Fish, il peut être utile d’analyser les arguments fournis par le biais de la ligne de commande. La plupart des tutoriels disponibles en ligne s’appuient sur bash pour cette opération et vont expliquer l’utilisation de getopts. Sous Fish, cette commande n’est pas disponible, mais les utilisateurs disposent du standard Unix getopt pour atteindre le même objectif. Illustration avec la portion de code qui suit.
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | function help_exit echo "Usage: [options] arguments..." echo "Arguments:" echo "-a : Do something" echo "-d : Do something else" echo "-c stuff : Do someting with stuff" exit 1 end set args (getopt -s sh abc: $argv); or help_exit set args (fish -c "for el in $args; echo \$el; end") set i 1 while true switch $args[$i] case "-a" echo "argument a is specified" case "-b" echo "argument b is specified" case "-c" set i (math "$i + 1") echo "value of argument c is" $args[$i] case "--" break end set i (math "$i + 1") end set pargs if math "$i <" (count $args) > /dev/null set pargs $args[(math "$i + 1")..-1] end echo "positional arguments:" $pargs |
Et vous ?
Qu’en pensez-vous ?
Avez-vous déjà fait usage de ce shell ? Si oui, quel retour pouvez vous en faire ?
Comment le comparez-vous à bash ? Csh ?
Quel est votre shell préféré ? Pourquoi ?
Voir aussi :
Microsoft apporte le shell Unix Bash à Windows 10 : le résultat d'une collaboration avec Canonical