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: Les messages d'erreur renvoyés sont: p> après cela j'ai essayé une autre solution i trouvé en ligne: p> Lorsque cela est utilisé, il renvoie cette erreur: p> 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? P> p>
8 Réponses :
Essayez de supprimer l'espace: 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. P> P>
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.
Cela n'aime probablement pas l'espace après le signe égal. P>
Quelques autres idées: P>
Assurez-vous que vous utilisez réellement BASH pour exécuter votre script et non SH / DASH. P> LI>
Vous pouvez déclarer explicitement une variable d'être un tableau à l'aide de déclarer -a varname code> p> li>
ul>
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?
Dans la première, il ne devrait y avoir aucun espace après les signes égaux.
#!/bin/bash ARRAY=( 'can1' 'can2' 'can3' )
J'ai cette haquette exacte et cela ne fonctionne toujours pas. J'ai essayé le code sur mon Mac ainsi que ma machine Ubuntu.
#!/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
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.
Si vous avez le bon shebang et vous Si vous avez Il n'y a pas de sens spécial pour avoir chmod + x scriptName code>, vous n'avez pas besoin de démarrer le script à l'aide de BASH ScriptName code> - Vous pouvez simplement utiliser ./scriptName code> ou si le répertoire est intégré est dans votre chemin code> code>, vous pouvez le démarrer en utilisant simplement scriptname code>. p>.
#! / bin / bash code> comme Shebang et exécutez ScriptName code> puis le shebang est remplacé par le choix de Shell sur la ligne de commande. p>
.sh code> ou .bash code> à 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). P>
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. P>
Les lignes exactes de mon code avant p> i supprimé les espaces avant et après les signes égaux. p> 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. p> Remarque: bash n'aime pas les espaces dans la définition variable! P>
BlockQuote> J'espère que cela aide les autres débutants comme moi! p> p>
Peut être, mauvaise déclaration de shebang ... Assurez-vous, utilisez #! / Bin / bash comme shebang p>
Voici un exemple de définition et d'itérer sur une matrice Bash sortie: p>
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 code> ou même avoir une extension de fichier du tout, tant que vous l'exécutez avec Bash.