Par vrai shell j’entendais zsh.
Zsh utilise des “modifieurs” (je connais pas la dénomination officielle) entre parenthèses pour manipuler les variables directement.
Dans l’exemple je découpe la chaine avec cette syntaxe ${(s:N:)var} avec var la variable et N le où les caractères de découpent. Il en résulte un tableau.
On récupère l’élément que l’on veut avec la syntaxe ${var2[i]} avec var2 un tableau et i l’indice entre 1 et la taille du tableau.
Dernière chose intéressante en zsh, c’est que l’on peut séquencer ces actions ce qui donne ici :
Pour l’autre exemple c’est juste un %.sh qui va retirer le suffixe .sh à la variable avant la découpe.
Avec ces modifieurs on peut vraiment faire énormément de choses, le split, le join, un filtre, une substitution à la sed, des tris (dans un sens ou l’autre avec ou sans respect de la casse), etc. En général on peut avec ça éviter la majorité des appelles à sed et grep (on créer un tableau puis on travaille dessus) et probablement à awk.
Un exemple de script où je me suis amusé à vraiment utiliser zsh comme il faut c’est apt-search :
https://www.debian-fr.org/yapyt-faciliter-l-installation-de-paquets-t35034.html#p355323