Массив в Bash не найден - PullRequest
7 голосов
/ 06 мая 2010

Я пытаюсь объявить массив в bash, но когда код запускается, он говорит, что не может найти массив. Я пытался записать объявление массива несколькими различными способами, но, как бы я ни пытался объявить его, кажется, что я не могу заставить его работать. Первоначально я пытался объявить это так:

candidate[1]= 0
candidate[2]= 0
candidate[3]= 0

Возвращаемые сообщения об ошибках:

votecalculation.sh: 13: candidate[1]=: not found
votecalculation.sh: 14: candidate[2]=: not found
votecalculation.sh: 15: candidate[3]=: not found

После этого я попробовал другое решение, которое нашел в Интернете:

ARRAY=( 'can1' 'can2' 'can3' )

Когда это используется, он возвращает эту ошибку:

votecalculation.sh: 12: Syntax error: "(" unexpected

Я новичок в Bash и действительно запутался в массивах. Есть ли какой-то конкретный способ, которым мне нужно объявить массив, или я просто ошибаюсь?

Ответы [ 7 ]

6 голосов
/ 06 мая 2010

Возможно, ему не нравится пробел после знака равенства.

Некоторые другие идеи:

  • Убедитесь, что вы действительно используете bash для запускасценарий, а не sh / dash.

  • Вы можете явно объявить переменную как массив, используя declare -a varname

5 голосов
/ 06 мая 2010
 #!/bin/bash

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

 echo ${myarray[0]}
 echo ${myarray[1]}

сохранить это в helloworld.bash

выполнить с помощью , ./helloword.bash

2 голосов
/ 20 сентября 2015

У меня была такая же проблема. Я пытался вызвать мой сценарий с помощью ./my_script.s, с. ./my_script.sh и я также попытался с "bash my_script.sh" и "sh my_script.sh". Я всегда получал одно и то же сообщение: «my_array [1]: команда не найдена».

Затем я увидел комментарий Криса Атли о том, что bash не нравится пробел после знака равенства.

Точные строки в моем коде до

my_array[1] = 34
my_array[2] = 57

Я удалил пробелы до и после знака равенства.

my_array[1]=34
my_array[2]=57

Затем я просто попытался выполнить следующее в терминале, и у меня больше не было сообщения об ошибке.

$ my_script.sh

ПРИМЕЧАНИЕ: Bash не любит пробелы в определении переменной!

Надеюсь, это поможет другим новичкам, таким как я!

2 голосов
/ 06 мая 2010

Попробуйте удалить пробел:

candidate[1]=0
candidate[2]=0

и так далее. Я сам не эксперт в этой области, но я думаю, что bash нужно распознать все выражение присваивания как одно слово, поэтому в нем не должно быть пробелов.

1 голос
/ 06 мая 2010

В первом не должно быть пробелов после знаков равенства.

candidate[1]=0
candidate[2]=0
candidate[3]=0

Второй выглядит правильно. Вы уверены, что ваша оболочка bash? Попробуйте добавить правильную строку хеш-взрыва в начало вашего скрипта, если у вас ее еще нет:

#!/bin/bash
ARRAY=( 'can1' 'can2' 'can3' )
0 голосов
/ 20 марта 2019

Может быть, плохая декларация Шебанга ... Обязательно используйте #! / Bin / bash как shebang

0 голосов
/ 06 мая 2010

Если у вас правильный shebang и вы chmod +x scriptname, вам не нужно запускать скрипт с использованием bash scriptname - вы можете просто использовать ./scriptname или если каталог, в котором он находится, находится в вашем PATH, тогдавы можете запустить его, просто набрав scriptname.

Если в качестве вашего shebang #!/bin/bash и запустите sh scriptname, тогда shebang будет отменен выбором оболочки в командной строке.* Нет особого значения иметь .sh или .bash в конце имени файла.Это просто вопрос стиля или предпочтений, которые нравятся некоторым людям, поскольку он предназначен для указания типа сценария (но только для пользователя, а не для системы).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...