Массив в 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
задан Waffle 6 May 2010 в 04:14
поделиться

5 ответов

 #!/bin/bash

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

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

сохраните это в файл helloworld.bash

выполните, используя . ./helloword.bash

5
ответ дан 6 December 2019 в 14:01
поделиться

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

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

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

2
ответ дан 6 December 2019 в 14:01
поделиться

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

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

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

#!/bin/bash
ARRAY=( 'can1' 'can2' 'can3' )
1
ответ дан 6 December 2019 в 14:01
поделиться

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

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

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

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

7
ответ дан 6 December 2019 в 14:01
поделиться

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

Если у вас есть #! / Bin / bash в качестве шебанга и вы выполняете имя сценария sh , то шебанг переопределяется выбором оболочки в командной строке.

Нет особого смысла в наличии .sh или .bash в конце имени файла. Это просто вопрос стиля или предпочтений, который нравится некоторым людям, поскольку он предназначен для указания типа сценария (но только для пользователя, а не для системы).

0
ответ дан 6 December 2019 в 14:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: