Bash : manipulation de tableaux
Résolu/Ferméarscy Messages postés 173 Date d'inscription dimanche 26 janvier 2014 Statut Membre Dernière intervention 5 octobre 2023 - 6 nov. 2022 à 21:26
- Impossible d'afficher le rapport de tableau croisé dynamique sur un rapport existant
- Bash permission non accordée - Forum Shell
- Bash écrire dans un fichier - Forum Shell
- Bingo bash free - Télécharger - Divers Jeux
- Bash path - Astuces et Solutions
- Bash: adduser : commande introuvable ✓ - Forum Debian
2 réponses
4 nov. 2022 à 17:01
Salut !
Il faut spécifier correctement le séparateur de liste
#$1 == nom du répertoire exploré # on spécifie de couper aux sauts de ligne uniquement IFS=$'\n' for line in $(ls -l ${1}) #pour chaque ligne do # on crée une liste en coupant aux espaces IFS=$' ' read -ra liste <<< "$line" echo "nom du fichier : ${liste[@]:8}" #afficher le 8eme élément (on compte à partir de 0) et les suivants done # attention de rétablir le séparateur par défaut pour la suite du script IFS=$' \t\n'
Comme il peut y avoir des espaces dans les noms de fichier, il faut afficher toute la fin de la ligne à partir de l'élément 8.
Modifié le 4 nov. 2022 à 19:32
Non car ta variable $d1 serait découpée par les sauts de lignes, les tabulations et les espaces, tu te retrouverais avec un tas de mots et pas des lignes.
Essaye un
echo $line
dans ta boucle, tu verras bien que tu obtiens chaque mot séparément.
NB1 : il est conseillé d'utiliser la syntaxe $(commande) plutôt que `commande` pour les sous-shell.
NB2 : tu peux débuguer ton script en le lançant avec
bash -x mon_script.sh
Modifié le 6 nov. 2022 à 15:52
Je constate en effet que je n'obtiens pas le résultat escompté :-(
Une dernière question avec la fameuse syntaxe $(commande)
j'ai du mal à percevoir la différence entre
for element in $var
et
for element in $(`commande`)
→ Quelle est la différence fondamentale?
Parce que je n'ai pas l'impression de voir une différence cruciale entre
var=`ls -a`
et
var=(`ls -a`)
par exemple
Modifié le 6 nov. 2022 à 20:45
La différence entre `` et $() est bien expliquée (en anglais) ici https://www.redhat.com/sysadmin/backtick-operator-vs-parens et là https://yeahexp.com/what-is-dollar-followed-by-parentheses-for-in-bash/
En deux mots :
- $() est plus lisible (pas de confusion avec ' ')
- $() est imbriquable sans caractère d'échappement
EDIT : attention on ne met pas les accents graves dans les $().
6 nov. 2022 à 21:26
merci beaucoup pour ces informations !
je pensais que le $() était réservé aux tableaux/listes :-S
4 nov. 2022 à 18:41
donc le concept serait de réaliser une matrice en 2D?
D1 : la liste des fichiers
D2 : chaque élément de la liste
Ne pourrais-je pas partir directement en un