Convertir une chaîne de texte dans un bash à la matrice
Comment puis-je convertir une chaîne comme celle-ci en BASH pour un tableau dans le coup!
J'ai une chaîne str qui contient "title1 titre2 titre3 title4 title5"
(les séparant par des espaces titres)
Je veux le str de modification d'un tableau qui permet de stocker chaque titre de chaque indice.
Si vos titres n'ont pas d'espaces, vous pouvez utiliser:
Il a travaillé! Merci!
array=( $string )
(pas de guillemets pour $string
). Si vos titres sont l'espace... eh bien... cela dépend de la façon dont ils sont formés.Il a travaillé! Merci!
OriginalL'auteur Ayush Mishra | 2013-10-29
Vous devez vous connecter pour publier un commentaire.
Afin de convertir la chaîne en un tableau, dire:
Le shell de réaliser de couper un mot sur les espaces, sauf si vous citez la chaîne.
Afin de boucle sur les éléments du ainsi créé tableau:
OriginalL'auteur devnull
Une autre méthode à l'aide de lire:
OriginalL'auteur perreal
Je suis malheureusement dans une position où j'ai longtemps d'un script shell qui est de la mise à niveau de l'interne à l'aide de variables scalaires à l'aide de tableaux. Mais, les utilisateurs sont également autorisés à définir ces variables elles-mêmes, éventuellement, avec un fichier qui est connecté sur le démarrage.
Donc, j'avais besoin de faire un moyen pour conditionnellement convertir un scalaire à un tableau, selon que l'utilisateur est provenant script est déclaré dans la nouvelle façon ou à l'ancienne.
Ma solution est overkill pour le cas simple ci-dessus, mais je voulais document pour les autres à la recherche de cette solution, car il est non trivial de venir avec quelque chose qui s'occupait de mon cas d'utilisation.
Le seul moyen que j'ai trouvé fiable pour gérer toutes les options en toute sécurité est donc:
Proprement gère tous les cas: variable existante, tableau existant, et il n'est pas défini.
Noter que, même si cela peut sembler un peu exagéré:
__existing_value="$(eval echo "\${$__array_name}" | sed -e 's,^[[:space:]]*,,' -e 's,[[:space:]]*$,,')"
...il traite le cas que la plupart des gens sont la construction de leur source configurations quelque chose comme ceci:
Dans ces cas, la
$ADDITIONAL_OPTIONS
variable va commencer par un espace. Si vous savez que votre intrants n'aurez pas besoin de rognage, tout cela est inutile.OriginalL'auteur Benjamin Reed