en faisant par exemple :
nb=$( echo "$var" | cut -d' ' -f1 )
C’est suffisamment peu trivial pour mériter d’être explicité à un débutant.
Tu sembles avoir pris ma question pour une critique contre toi, mais c’était une vraie question. J’aurais pour louper un moyen simple d’obtenir le premier élément.
S’il n’y en a pas (tu m’excuseras, j’espère, de ne pas considérer comme simple l’appel à des commandes tierces), c’est par contre encore une tare du shell POSIX.
Bash, lui, supporte de vrais tableaux ; malheureusement, il n’est pas partout (même s’il est sur la plupart des distributions Linux, hormis les mini-distributions basées sur Busybox).
et pour un vieux système comme solaris ou hpux par exemple tu utilises des anti-quotes `.
Si on choisit /bin/sh pour la portabilité et qu’on n’est pas sûr de ne pas tomber sur un vieux shell, mieux vaut éviter autant que possible tous les « ajouts modernes », donc utiliser des anti-quotes.
sur la fin ta réponse ( fin de second message )c'est : moi je le fait en perl
C'est un peu hors sujet non ?
Je n’ai pas dit le contraire ; c’est une digression qui ne s’adresse pas particulièrement à l’auteur de la question, dont je présume que le but est de se familiariser avec le shell. C’est pour ça que je n’ai pas développé.
En shell, tu passes ton temps à essayer d’éviter des écueils (par exemple, les variables interprétées à chaque appel ; si elles peuvent contenir des espaces ou des caractères bizarres, tu as intérêt à les quoter correctement ; je connais un sysadmin pourtant expérimenté qui a effacé un tas de fichiers qu’il n’aurait pas dû à cause de ça) et à contourner les limitations (par exemple, les fonctions ne peuvent pas retourner de valeur hormis un code d’erreur).
peux-tu m'expliquer quelle est ta solution concrète dans ce cas ?
Si tu la veux, la voilà :
#!/usr/bin/perl -wusestrict;my@nb=@ARGV;if(!@nb)# En contexte scalaire, @nb rend le nombre d’éléments du tableau @nb.# On peut même l’utiliser comme booléen.{print"Nombres (séparés par des espaces : ";@nb=split' ',<STDIN>;}@nbordie"Recherche du minimum ; il faut indiquer des nombres !\n";my$min=shift@nb;foreach(@nb){$_<$minand$min=$_;}print"Minimum : $min\n";
et tant qu’on y est, l’équivalent en shell (pas tout à fait : la version Perl supporte des nombres décimaux) :
#!/bin/shif[$#=0];thenecho -n "Nombres (séparés par des espaces) : "read nbs
set -- $nbsfiif[$#=0];thenecho"Recherche du minimum ; il faut indiquer des nombres !\n"exitfimin=1ドルwhile[$# -gt 0];do[1ドル -lt $min]&&min=1ドルshiftdoneecho"Minimun : $min"
Bon, dans le cas présent, la version shell n’est pas tellement plus compliquée, mais on est dans un cas simple : pas de valeurs pouvant contenir des espaces, pas besoin de plus d’un tableau...
« Le fascisme c’est la gangrène, à Washington comme en Russie. » — adapté de Renaud, Hexagone
[^] # Re: modifie l'initialisation
Posté par Arthur Accroc . En réponse au message Passer de paramètres à valeurs saisie par l'utilisateur... Évalué à 3.
Lapin compris.
C’est suffisamment peu trivial pour mériter d’être explicité à un débutant.
Tu sembles avoir pris ma question pour une critique contre toi, mais c’était une vraie question. J’aurais pour louper un moyen simple d’obtenir le premier élément.
S’il n’y en a pas (tu m’excuseras, j’espère, de ne pas considérer comme simple l’appel à des commandes tierces), c’est par contre encore une tare du shell POSIX.
Bash, lui, supporte de vrais tableaux ; malheureusement, il n’est pas partout (même s’il est sur la plupart des distributions Linux, hormis les mini-distributions basées sur Busybox).
Si on choisit /bin/sh pour la portabilité et qu’on n’est pas sûr de ne pas tomber sur un vieux shell, mieux vaut éviter autant que possible tous les « ajouts modernes », donc utiliser des anti-quotes.
Je n’ai pas dit le contraire ; c’est une digression qui ne s’adresse pas particulièrement à l’auteur de la question, dont je présume que le but est de se familiariser avec le shell. C’est pour ça que je n’ai pas développé.
En shell, tu passes ton temps à essayer d’éviter des écueils (par exemple, les variables interprétées à chaque appel ; si elles peuvent contenir des espaces ou des caractères bizarres, tu as intérêt à les quoter correctement ; je connais un sysadmin pourtant expérimenté qui a effacé un tas de fichiers qu’il n’aurait pas dû à cause de ça) et à contourner les limitations (par exemple, les fonctions ne peuvent pas retourner de valeur hormis un code d’erreur).
Si tu la veux, la voilà :
et tant qu’on y est, l’équivalent en shell (pas tout à fait : la version Perl supporte des nombres décimaux) :
Bon, dans le cas présent, la version shell n’est pas tellement plus compliquée, mais on est dans un cas simple : pas de valeurs pouvant contenir des espaces, pas besoin de plus d’un tableau...
« Le fascisme c’est la gangrène, à Washington comme en Russie. » — adapté de Renaud, Hexagone