Я пытаюсь объявить массив в ударе, но когда код выполняется, он говорит, что он не может найти массив. Я попытался выписать объявление массива несколькими различными способами, но кажется, неважно, как я пытаюсь объявить это, я не могу заставить это работать. Я первоначально пытался объявить это как таковой:
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 и становлюсь действительно смущенным массивами. Есть ли некоторый особенный метод, я должен объявить массив, или я просто иду об этом полностью неправильно?
#!/bin/bash
myarray[0]=hello
myarray[1]=world
echo ${myarray[0]}
echo ${myarray[1]}
сохраните это в файл helloworld.bash
выполните, используя . ./helloword.bash
Попробуйте убрать пробел:
candidate[1]=0
candidate[2]=0
и так далее. Я сам не эксперт в этой области, но думаю, что bash должен распознать все выражение присваивания как одно слово, поэтому в нем не может быть пробелов.
В первом не должно быть пробелов после знаков равенства.
candidate[1]=0
candidate[2]=0
candidate[3]=0
Второй выглядит правильным. Вы уверены, что ваша оболочка - bash? Попробуйте добавить правильную строку хеш-бэга в верхнюю часть вашего скрипта, если у вас ее еще нет:
#!/bin/bash
ARRAY=( 'can1' 'can2' 'can3' )
Вероятно, не любит пробел после знака равенства.
Некоторые другие идеи:
Убедитесь, что вы действительно используете для запуска скрипта bash, а не sh / dash.
Вы можете явно объявить переменную как массив, используя declare -a varname
Если у вас правильный shebang и вы chmod + x имя сценария
, вам не нужно запускать сценарий, используя имя сценария bash
- вы можете просто использовать ./ имя сценария
или если каталог, в котором он находится, находится в вашем ПУТЬ
, затем вы можете запустить его, просто используя имя сценария
.
Если у вас есть #! / Bin / bash
в качестве шебанга и вы выполняете имя сценария sh
, то шебанг переопределяется выбором оболочки в командной строке.
Нет особого смысла в наличии .sh
или .bash
в конце имени файла. Это просто вопрос стиля или предпочтений, который нравится некоторым людям, поскольку он предназначен для указания типа сценария (но только для пользователя, а не для системы).