Script Shell - vérifier la longueur lors de la découpe de la chaîne de tableau
Je suis à l'aide d'un script bash et je suis en train de découper une chaîne avec des url à l'intérieur par exemple:
str=firsturl.com/123416 secondurl.com/634214
De sorte que ces Url sont séparés par des espaces, j'ai déjà utilisé le IFS
commande pour scinder la chaîne et il fonctionne très bien, j'ai peut itérer à travers les deux URLs avec:
for url in $str; do
#some stuff
done
Mais mon problème est que j'ai besoin d'obtenir le nombre d'éléments de ce découpage a, donc, pour le str
exemple, il doit retourner 2, mais en utilisant cette:
${#str[@]}
retourne la longueur de la chaîne (40
pour l'exemple), je veux dire le nombre de caractères, quand j'en ai besoin pour obtenir 2
.
Aussi itération avec un compteur ne fonctionne pas, parce que j'ai besoin de connaître le nombre d'éléments avant de répéter le tableau.
Des suggestions?
Vous devez vous connecter pour publier un commentaire.
Diviser la chaîne en un tableau et utiliser à la place:
Vous ne devriez jamais avoir un espace séparé de liste de chaînes de caractères bien. Si vous êtes l'obtention de leur ligne par ligne à partir d'une autre commande, vous pouvez utiliser un
while read
boucle:Pour encodés correctement Url, ce ne sera probablement pas faire beaucoup de différence, mais en général, cela permettra d'éviter glob expansion et de certains espaces des questions, et c'est la forme canonique que d'autres commandes (
wget -i
) travaille avec.Vous devriez utiliser quelque chose comme cela
Plusieurs façons:
bash tableau:
awk:
*nix utlity:
bash sans tableau:
Si vous créez une fonction qui fait echo $* alors que doit fournir le nombre d'éléments à split.
Puis, passant $str à cette fonction vous donnera le résultat