Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays bash中的数组元素算法_Arrays_Bash_Math_Arithmetic Expressions - Fatal编程技术网

Arrays bash中的数组元素算法

Arrays bash中的数组元素算法,arrays,bash,math,arithmetic-expressions,Arrays,Bash,Math,Arithmetic Expressions,我正在使用bash并尝试添加从文件创建的数组的所有元素 while read line; do array=($line); sum=0 length=${#array[@]} for i in ${array[@]:0:$length}; do sum=$[$sum+${array[i]}] #<--- this doesn't work? done echo $sum done < $1 因此,我不能使用: fo

我正在使用bash并尝试添加从文件创建的数组的所有元素

while read line; do
    array=($line);
    sum=0
    length=${#array[@]}
    for i in ${array[@]:0:$length}; do
       sum=$[$sum+${array[i]}]   #<--- this doesn't work?
    done
    echo $sum
done < $1
因此,我不能使用:

for i in "${array[@]}"

尝试使用expr添加两个表达式,如:

sum=$(expr "$sum" + "${arr[i]}")

sum=$((sum+arr[i]))
echo“11 13”>test.txt
echo“12”>>test.txt
读的时候——一行;把它读作数组吗
总和=0
对于((i=1;i<${line};i++);一行中的每一个数字都要做
sum=$(expr“$sum”+“${line[i]}”)##将其添加到sum中
完成
echo$行[0]$sum##打印sum
完成
OP编辑后:

echo“ABC 11 13”>test.txt echo“DEF 12”>>test.txt

while read -a line; do ##read it as array
sum=0
for ((i=1; i < $((${#line[@]})); i++)); do ##for every number in line
   sum=$(expr "$sum" + "${line[i]}") ## add it to sum
   if [[ $i -eq $((${#line[@]}-1)) ]]
   then
       echo "${line[0]} $sum" ##print sum
       sum=0
   fi
done
done < test.txt
Output:
ABC 24
DEF 12
读取时-一行;把它读作数组吗
总和=0
对于((i=1;i<$(${行[@]});i++);一行中的每一个数字都要做
sum=$(expr“$sum”+“${line[i]}”)##将其添加到sum中
如果[$i-eq$(${line[@]}-1))]
然后
回显“${line[0]}$sum”##打印sum
总和=0
fi
完成
完成
如果要使用bash中的循环对文件每行中的数字求和,可以这样做

#!/bin/bash
while read line; do
    array=($line);
    sum=0
    length=${#array[@]}
    for i in ${array[@]:0:$length}; do
       sum=$[$sum+$i]
    done
    echo $sum
done < "$1"

sum=$(expr“$sum”+“${arr[i]}”):给我一个错误。sum=$((sum+arr[i]):不起作用:/i没有错误我修改了你的脚本。我不能将其用于循环,我在编辑的问题中解释了原因。在“${!行[@])中为i使用
如何;do
for((i=0;i<${line};i++)
for((i=0;i<${length};i++)
也不会继续编辑带有附加要求的问题。问题不是循环,我正在成功地从索引1创建到数组长度。问题在于算术。它不接受整数和数组字符串数的相加。我不能将其用于循环,我在编辑的问题中解释了原因。@Vaderico仍然
I
是值,而不是索引。请参见编辑。你的问题也有输入错误。它应该是
length=${#array[@]}
而不是
length=${#arr[@]}
while read -a line; do ##read it as array
sum=0
for ((i=1; i < $((${#line[@]})); i++)); do ##for every number in line
   sum=$(expr "$sum" + "${line[i]}") ## add it to sum
   if [[ $i -eq $((${#line[@]}-1)) ]]
   then
       echo "${line[0]} $sum" ##print sum
       sum=0
   fi
done
done < test.txt
Output:
ABC 24
DEF 12
#!/bin/bash
while read line; do
    array=($line);
    sum=0
    length=${#array[@]}
    for i in ${array[@]:0:$length}; do
       sum=$[$sum+$i]
    done
    echo $sum
done < "$1"
awk '{s=0;for(i=1;i<=NF;i++) s+=$i;print s}' file