8
votes

Tableau à bash non trouvé

J'essaie de déclarer un tableau en bash, mais lorsque le code est exécuté, il ne peut pas trouver le tableau. J'ai essayé d'écrire la déclaration de la matrice de différentes manières, mais il semble que j'essaie de le déclarer, je ne peux pas le faire fonctionner. J'ai essayé à l'origine de le déclarer comme tel: xxx

Les messages d'erreur renvoyés sont: xxx

après cela j'ai essayé une autre solution i trouvé en ligne: xxx

Lorsque cela est utilisé, il renvoie cette erreur: xxx

Je suis nouveau à bash et que je reçois Vraiment confus sur les tableaux. Y a-t-il une manière spécifique que j'ai besoin de déclarer un tableau ou je vais juste y aller complètement mal?


2 commentaires

Ok, donc à la fin, j'ai compris le problème. Même si la tête du fichier était #! / Bin / bash, le nom du fichier s'est terminé par .sh. Après avoir changé l'extension de fichier sur .bash et l'exécuter à l'aide de "bash votéCalculations.bash" dans la terminale, cela fonctionne. Merci encore à tout le monde pour votre aide!


FYI L'extension de fichier n'a pas d'importance ... vous pouvez le laisser comme .sh ou même avoir une extension de fichier du tout, tant que vous l'exécutez avec Bash.


8 Réponses :


3
votes

Essayez de supprimer l'espace: xxx

et ainsi de suite. Je ne suis pas un expert dans ce domaine moi-même, mais je pense que Bash doit reconnaître l'expression de l'affectation entière comme un mot, vous ne pouvez donc pas avoir d'espaces dedans.


1 commentaires

votéCalculation.sh: 13: candidat [1] = 0: non trouvé votéCalculation.sh: 14: candidat [2] = 0: non trouvé votéCalculation.sh: 15: candidat [3] = 0: non trouvé que je l'ai essayé sans Les espaces et ci-dessus sont l'erreur que je reçois lorsque j'essaie d'espaces.



11
votes

Cela n'aime probablement pas l'espace après le signe égal.

Quelques autres idées:

  • Assurez-vous que vous utilisez réellement BASH pour exécuter votre script et non SH / DASH.

  • Vous pouvez déclarer explicitement une variable d'être un tableau à l'aide de déclarer -a varname


2 commentaires

Il est indiqué que la déclaration n'a pas été trouvée lorsque j'essaie de déclarer le tableau ... il est tellement étrange que le reste du programme fonctionne après avoir poussé les erreurs.


Êtes-vous sûr que vous courez Bash?



1
votes

Dans la première, il ne devrait y avoir aucun espace après les signes égaux.

#!/bin/bash
ARRAY=( 'can1' 'can2' 'can3' )


1 commentaires

J'ai cette haquette exacte et cela ne fonctionne toujours pas. J'ai essayé le code sur mon Mac ainsi que ma machine Ubuntu.



5
votes
 #!/bin/bash

 myarray[0]=hello
 myarray[1]=world

 echo "${myarray[0]}"
 echo "${myarray[1]}"
save that to helloworld.bash and chmod +x the file.execute using
./helloword.bash

9 commentaires

Cela n'a pas trouvé ces non plus et pour l'écho, il est dit que c'est une "mauvaise substitution"


Avez-vous une étrange implémentation de bash? Comment appelez-vous le script?


Je ne pense pas que je faisais. J'appelle le script du terminal à l'aide de "sh votéCalculations.sh"


essayer ./votecalculations.sh ou. ./votecalculations.sh


mais essayez d'abord avec le code que j'ai collé, au cas où vous auriez d'autres erreurs dans votre code


Si vous l'appelez explicitement avec sh, qui remplace quel que soit le #! Vous avez dans le script lui-même. Sur Ubuntu, je crois que Sh est réellement pointu, pas bash. Et si vous courez via "Bash votecalculations.sh"?


Premier: SH: ne peut pas ouvrir ./votecalculations.sh Second One vient de passer à une nouvelle ligne et attend une autre commande.


Comme je l'ai dit, essayez d'abord mon script. le tien peut avoir d'autres erreurs.


Cela fonctionne quand il est dans la situation que vous avez posté. Ce doit être quelque chose d'autre mal avec mon code. Devinez qu'il est temps de creuser un peu plus profondément. Merci pour votre aide.



0
votes

Si vous avez le bon shebang et vous chmod + x scriptName , vous n'avez pas besoin de démarrer le script à l'aide de BASH ScriptName - Vous pouvez simplement utiliser ./scriptName ou si le répertoire est intégré est dans votre chemin , vous pouvez le démarrer en utilisant simplement scriptname . .

Si vous avez #! / bin / bash comme Shebang et exécutez ScriptName puis le shebang est remplacé par le choix de Shell sur la ligne de commande.

Il n'y a pas de sens spécial pour avoir .sh ou .bash à la fin du nom de fichier. C'est juste une question de style ou de préférence que certaines personnes aiment depuis qu'il est destinée à indiquer le type de script (mais uniquement à l'utilisateur - pas au système).


0 commentaires

2
votes

J'ai eu le même problème. J'ai essayé d'appeler mon script avec ./my_script.s, avec. ./my_script.sh et j'ai aussi essayé avec "bash my_script.sh" et "sh my_script.sh". J'ai toujours eu le même message: "My_array [1]: Commande introuvable".

Puis j'ai vu le commentaire de Chris Atlee sur BASH N'aimant pas l'espace après le signe égal.

Les lignes exactes de mon code avant xxx

i supprimé les espaces avant et après les signes égaux. xxx

alors, j'ai simplement essayé ce qui suit, j'ai simplement essayé ce qui suit dans le terminal et n'a plus eu le message d'erreur. xxx

Remarque: bash n'aime pas les espaces dans la définition variable!

J'espère que cela aide les autres débutants comme moi!


0 commentaires

-2
votes

Peut être, mauvaise déclaration de shebang ... Assurez-vous, utilisez #! / Bin / bash comme shebang


0 commentaires

0
votes

Voici un exemple de définition et d'itérer sur une matrice Bash xxx

sortie: xxx


0 commentaires