6
votes

Tableau de retour d'une fonction Bash

Je fais un script Bash et j'ai rencontré un problème. Alors disons que j'ai eu ce xxx

y a-t-il de moyen que je puisse faire ce travail? J'ai cherché beaucoup beaucoup et rien que j'ai trouvé travaillé. Je pense que faire le a [] une variable globale devrait fonctionner, mais je ne trouve pas quelque chose qui fonctionne réellement dans mon code. Y a-t-il un moyen de renvoyer la matrice de la fonction au programme principal?

Merci d'avance


12 commentaires

Ce code fonctionne sans aucun problème. Ne pas inventer le code pour montrer le problème. Montrez-nous le code actuel qui cause le problème.


Bienvenue dans le débordement de pile. Veuillez améliorer votre question en publiant tous les messages d'erreur pertinents exactement tels qu'ils apparaissent. Assurez-vous également d'inclure un échantillon correctement formaté de votre Sortie attendue afin que les gens comprennent les résultats que vous essayez d'atteindre.


@depesz: Je suis à moitié d'accord. Je pense que l'Asker Devrait "Inventer le code pour montrer le problème" - mais il doit s'assurer que c'est (comme vous le mettez) "Code réel qui cause le problème". Ceci est connu sous le nom de SSCCE - un exemple court, autonome, correct (compilable) .


@RUAKH: Eh bien, il / elle a le code qui cause le problème. C'est juste que sa version inventée pour le montrer - ne contient pas de problèmes. Malheureusement, il est très courant (du moins sur IRC) que les gens ont un problème avec quelque chose, mais montrent quelque chose de différent.


Pastebin.com/2qcwfune Il va expirer en 1h


Les 10 dernières lignes de mon code ne fonctionneront pas


"Ne fonctionnera pas" n'est pas une description technique. Essayez d'exécuter votre script avec bash -x script_name qui retracera ce qui se passe.


BAH DAMN! Merci CDARKE! Eh bien, il y avait une sortie 0 qui ferma mon programme avant d'afficher mes tableaux! Je l'ai commenté et ça a fonctionné !! Merci :)


MKDIR TMP; Touchez TMP / {FILE1, FILE2}; ln tmp / fichier2 TMP / fichier3; Bash YourScript TMP SORTIES "Le numéro d'index de ... / TMP / FILE2 est 28578767 et sa liaison matérielle est 2", "File2 est hardlinked to File3 avec indexnumber: 28578767, File3 est durcie à File2 avec indexnumber: 28578767 ". Semble fonctionner bien.


@depesz: À droite, mais voulez-vous vraiment que chaque question post-question de poster l'ensemble du programme qu'ils ont un problème? Il leur est préférable d'affiner le problème et de poster un programme petit mais complet qui démontre le problème. Cet ask a manqué la partie "qui démontre le problème"; Vous voulez aller trop loin dans l'autre sens, en manquant la "petite" partie.


Cela a bien fonctionné maintenant, comme je l'ai dit programme, arrêtez-vous avant de lire les 10 dernières lignes, c'est pourquoi je ne pouvais pas obtenir la sortie souhaitée! Merci à tous pour votre aide!


@RUAKH: Je ne veux pas voir un programme entier. Mais si je dois choisir, je choisis trop d'informations vs aussi petit et trompeur.


5 Réponses :


3
votes

Cela fonctionne bien comme décrit. La raison la plus probable que cela ne fonctionne pas dans votre code actuel est que vous arrivez à l'exécuter dans un sous-vase:

myvalue=$(create_some_array)
echo ${a[*]}


1 commentaires

j = ls -i "$ i" | awk '{imprimer $ 1}' ; inode [compte] = $ j; C'est la partie que je insère dans un tableau. Et quand j'essaie d'echo cela en dehors de la fonction, il ne fonctionne pas



2
votes

Vous pouvez créer une matrice locale à une fonction, puis le renvoyer:

function create_some_array(){
    local -a a=()
    for i in $(seq $1 $2); do
        a[i]=$i
    done
    echo ${a[@]}
}

declare -a a=()

a=$(create_some_array 0 10)

for i in ${a[@]}; do
   echo "i = " $i
done


0 commentaires

3
votes

Cela ne fonctionnera pas comme prévu lorsqu'il y a des espaces blancs dans les tableaux: xxx pré>

et pire: si vous essayez d'obtenir des indices de tableau de l'extérieur "A", il s'avère Soyez un scalaire: p>

$ eval b=("$(create_some_array 0 3)")
$ echo -e "${!b[@]}\n${b[3]}"
0 1 2 3
3 9


1 commentaires

énervant! Cela fonctionne mais mon IDE me donne une erreur qu'elle ne supprime pas ... l'analyse arrêtée ici. Utilisation non valide des paranthèses? .. agaçant mais +1



2
votes

salut ici est ma solution: xxx

Essayez ce code sur: https://www.tutorialspoint.com/execute_bash_online.php


1 commentaires

Cela fonctionne +1 mais c'est un peu gênant parce que si vous videz la longueur de la matrice, c'est toujours 1 - mon IDE me met en garde son converti en une chaîne et la sortie de la console accepte



0
votes

Ces deux travaillent pour moi avec SH et bash : xxx

comme mis à part, la fonction en retrait ressemble à ceci: < / p> xxx

Cette réponse est basée sur mais mieux explique et simplifie les réponses de @hans et @Didierc


0 commentaires