Substitution et parametres positionnes
Résolu/Fermé
'Lex
Messages postés
16
Date d'inscription
samedi 22 mars 2014
Statut
Membre
Dernière intervention
3 avril 2014
-
Modifié par mamiemando le 1/04/2014 à 23:48
mamiemando Messages postés 33081 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 27 avril 2024 - 3 avril 2014 à 20:15
mamiemando Messages postés 33081 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 27 avril 2024 - 3 avril 2014 à 20:15
A voir également:
- Substitution et parametres positionnes
- Ouvrir paramètres - Guide
- Le bon coin mon compte parametres - Guide
- Paramètres dns - Guide
- Paramètres de confidentialité - Guide
- Échec de la récupération des paramètres de twitch ✓ - Forum jeux en ligne
3 réponses
Utilisateur anonyme
2 avril 2014 à 07:00
2 avril 2014 à 07:00
salut,
avec zsh:
avec bash:
avec zsh:
set -- a b c d
for ((i=1;i<=$#;i+=3)); do echo ${(P)i}; done
avec bash:
set -- a b c d
for ((i=1;i<=$#;i+=3)); do echo ${!i}; done
mamiemando
Messages postés
33081
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
27 avril 2024
7 749
1 avril 2014 à 23:47
1 avril 2014 à 23:47
Voici comment tu peux faire :
À l'exécution :
Bonne chance
!/bin/bash index=$(expr 1 + 2) cmd="echo \$$index" echo $cmd eval $cmd
À l'exécution :
(mando@velvet) (~) $ sh toto.sh aa bb ccc
echo $3
ccc
Bonne chance
mamiemando
Messages postés
33081
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
27 avril 2024
7 749
3 avril 2014 à 02:06
3 avril 2014 à 02:06
'expr' n'est pas utile dans le contexte d'un interpréteur autre que csh.
Sauf que là l'énoncé indiquait qu'il fallait faire une addition. Il faut à un moment écrire cette addition avec un opérateur. Donc expr ou un opérateur bash spécifique pourquoi pas, mais en tout cas on ne peut pas écrire d'addition directement. D'où mon "expr".
pourquoi un hashbang bash, si c'est pour appeler le script avec 'sh' ?
Sous debian :
... qui est un bash allégé. J'admets que ce n'est pas forcément le cas de tous les linux, mais généralement sh n'est bien souvent qu'un bash ou un bash-like. Donc j'ai raccourci mais en toute rigueur il aurait fallu écrire
Ensuite pourquoi bash et pas sh. L'opérateur $(...) n'est pas supporté par tous les shells et que le forum CCM altère les backquotes (et ce qui est triste c'est que ça fait des années que j'ai remonté ce bug), sinon c'est ce que j'aurais utilisé, et pour le coup j'aurais vraiment mis "sh" partout.
Maintenant je concède que la réponse que tu proposes pour zsh et bash est syntaxiquement plus élégante.
https://forums.commentcamarche.net/forum/affich-29982343-substitution-et-parametres-positionnes#3
Sauf que là l'énoncé indiquait qu'il fallait faire une addition. Il faut à un moment écrire cette addition avec un opérateur. Donc expr ou un opérateur bash spécifique pourquoi pas, mais en tout cas on ne peut pas écrire d'addition directement. D'où mon "expr".
pourquoi un hashbang bash, si c'est pour appeler le script avec 'sh' ?
Sous debian :
lrwxrwxrwx 1 root root 4 janv. 10 11:14 /bin/sh -> dash
... qui est un bash allégé. J'admets que ce n'est pas forcément le cas de tous les linux, mais généralement sh n'est bien souvent qu'un bash ou un bash-like. Donc j'ai raccourci mais en toute rigueur il aurait fallu écrire
bash toto.sh. Maintenant très honnêtement je pense que si tu t'attaches à cette ligne, c'est que tu ne focalises pas sur la partie "importante" de la réponse. Le seul intérêt de cette ligne c'était indiquer les paramètres que j'avais passé.
Ensuite pourquoi bash et pas sh. L'opérateur $(...) n'est pas supporté par tous les shells et que le forum CCM altère les backquotes (et ce qui est triste c'est que ça fait des années que j'ai remonté ce bug), sinon c'est ce que j'aurais utilisé, et pour le coup j'aurais vraiment mis "sh" partout.
Maintenant je concède que la réponse que tu proposes pour zsh et bash est syntaxiquement plus élégante.
https://forums.commentcamarche.net/forum/affich-29982343-substitution-et-parametres-positionnes#3
on ne peut pas écrire d'addition directement
en bash (au moins), on peut :
en toute rigueur, il faut rendre le script exécutable, et laisser le noyau utiliser le shell indiqué par le hashbang.
enfin, j'ai donné ma réponse, le commentaire t'était adressé.
en bash (au moins), on peut :
$ declare -i sommesinon, un shell POSIX (ash dash bash ksh zsh) effectue des évaluations arithmétiques :
$ somme="12 + 24"
$ echo $somme
36
$ echo $((12 + 24))eventuellement, bash possède une commande
36
let:
let somme=12+24
echo $somme
36
en toute rigueur, il faut rendre le script exécutable, et laisser le noyau utiliser le shell indiqué par le hashbang.
enfin, j'ai donné ma réponse, le commentaire t'était adressé.
mamiemando
Messages postés
33081
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
27 avril 2024
7 749
3 avril 2014 à 20:15
3 avril 2014 à 20:15
Ok merci pour ces précisions
'Lex
Messages postés
16
Date d'inscription
samedi 22 mars 2014
Statut
Membre
Dernière intervention
3 avril 2014
3 avril 2014 à 02:25
3 avril 2014 à 02:25
@mamiemando; merci. ça colle.
quelqu'un aurai des renseignements sur l'option n de read? (read -n ...) je ne parvient pas a la faire fonctionner.
quelqu'un aurai des renseignements sur l'option n de read? (read -n ...) je ne parvient pas a la faire fonctionner.
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 407
3 avril 2014 à 08:14
3 avril 2014 à 08:14
Salut,
Extrait du
Seule 3 lettres ont pu être tapées dans le terminal.
Extrait du
man bash:
-n nb_car
read s'arrête après avoir lu nb_car caractères plutôt que d'attendre une ligne complète en entrée, mais un délimiteur est respecté si moins de nb_car caractères ont été lus avant le délimiteur.
$ read -n 3 -p "Entrez 5 lettres : "
Entrez 5 lettres : mam
$ echo ${REPLY}
mam
Seule 3 lettres ont pu être tapées dans le terminal.
'Lex
Messages postés
16
Date d'inscription
samedi 22 mars 2014
Statut
Membre
Dernière intervention
3 avril 2014
3 avril 2014 à 09:39
3 avril 2014 à 09:39
ça ne fonctionne pas en zsh
et j'ai besoin de zsh pour mettre un grand nombre de paramètres aux commandes.
et j'ai besoin de zsh pour mettre un grand nombre de paramètres aux commandes.
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 407
3 avril 2014 à 09:46
3 avril 2014 à 09:46
Faut pas avoir la flemme de chercher des fois ;-((
Extrait :
Extrait :
-k [ num ]
Read only one (or num) characters from the terminal.
'Lex
Messages postés
16
Date d'inscription
samedi 22 mars 2014
Statut
Membre
Dernière intervention
3 avril 2014
3 avril 2014 à 09:49
3 avril 2014 à 09:49
Merci. je ne la trouvai pas.