2013-05-01 2 views
1

Я пытаюсь написать простой скрипт bash, который добавляет целые числа и поставляет сумму. Я понял, что самый простой способ - назначить вход для массива. Затем перемещайте массив для выполнения суммирования. Мне нужно использовать длину массива в цикле for for и не могу понять, как назначить длину массива переменной.Как назначить длину массива переменной в bash

Любая оцененная помощь на простой сценарий (который я сделал, чтобы узнать Баш)

#!/bin/bash 
# add1 : adding user supplied ints 

echo -n "Please enter any number of integers: " 
read -a input 

echo "Your input is ${input[*]}" 
echo "${#input[@]} number of elements" 

num = ${#input[@]} # causing error 
for ((i = 0; i < "${num}"; ++i)); do # causing error 
    sum = $((sum + input[$i])) 
done 

echo "The sum of your input is $sum" 

Что дает ошибки:

line 10: num: command not found 
line 11: ((: i < :syntax error: operand expected (error token is "< ") 
+1

[подробнее] (http://tldp.org/LDP/abs/html/varassignment.html) при присвоении con в Bash :) – summea

+0

Вы говорите «вызывая ошибку»; было бы полезно узнать, какую ошибку он вызывает. – msw

+0

@msw - Уже решена. Спасибо за ответ. Ошибка: строка 10: num: команда не найдена строка 11: ((: i <: синтаксическая ошибка: ожидается операнд (токен ошибки «<») – ZenStunna

ответ

7

Вы просто получите ошибку синтаксиса. Удалите пробел перед =:

num = ${#input[@]} # causing error 

становится:

num=${#input[@]} # works 

Обратите внимание, что если вы присваиваете переменной в Баш с помощью оператора =, там не должно быть никакого пространства до и после =

Прочитано this entry about Variable Assignment in the Advanced Bash-Scripting Guide

+0

Спасибо, он работает. У меня была такая же ошибка во всей программе. И я чувствую себя идиотом. Исходя из C++, где это пространство не имеет значения ... – ZenStunna

+0

не беспокойтесь об этом. когда-то видел эту ошибку;) – hek2mgl

Смежные вопросы