Extraire la sous-chaîne en passant une variable à couper

Est-il possible de faire quelque chose comme ça en bash avec cut :

 strLf="JJT9879YGTT" strZ=(2, 3, 5, 6, 9, 11) numZ=${#strZ[@]} for ((ctZ=0; ctZ<${numZ}; ctZ++)) do lenThis=${strZ[${ctZ}]} fetch=$(echo "${strLf}" | cut -c 1-${lenThis}) done 

Par des boucles successives, je veux que ${fetch} contienne "JJ" "JJT" "JJT98" "JJT987" "JJT9879YG" "JJT9879YGTT" , etc., en fonction des index fournis par strZ .

Ou est-ce que je dois faire autre chose?

Vous pouvez utiliser ${ssortingng:position:length} pour obtenir les caractères de length de $ssortingng commençant en position .

 $ s="JJT9879YGTT" $ echo ${s:0:2} JJ $ echo ${s:0:3} JJT 

Et aussi en utilisant des variables:

 $ t=5 $ echo ${s:0:$t} JJT98 

Donc, si vous mettez toutes ces valeurs dans un tableau, vous pouvez les parcourir en boucle et utiliser sa valeur comme un argument de length indiquant ${ssortingng:0:length} :

 strLf="JJT9879YGTT" strZ=(2 3 5 6 9 11) for i in ${strZ[@]}; do echo "${strLf:0:$i}" done 

Pour votre chaîne donnée, il me le retourne:

 $ for i in ${strZ[@]}; do echo "${strLf:0:$i}"; done JJ JJT JJT98 JJT987 JJT9879YG JJT9879YGTT 
 words="JJT9879YGTT" strZ=(2 3 5 6 9 11) for i in "${strZ[@]}" do echo ${words:0:$i} done 

Sortie:

 JJ JJT JJT98 JJT987 JJT9879YG JJT9879YGTT 

DEMO

Réalisé mon erreur – j’utilisais des virgules dans le tableau pour identifier les éléments.

Donc, au lieu de ce que j’utilisais:

 strZ=(2, 3, 5, 6, 9, 11) 

Je dois utiliser:

 strZ=(2 3 5 6 9 11) 

Cela fonctionne pour cut aussi.