Bash Can';shell中似乎没有添加两个数字

Bash Can';shell中似乎没有添加两个数字,bash,shell,Bash,Shell,我一直在谷歌上搜索并尝试不同的方法,但似乎没有任何效果 我有以下代码 string=0 4 5 27 8 7 0 6 total=0 for n in "$string"; do total=$(($total + $n)) done 这样我想计算该字符串中所有数字的总和 我还尝试了expr“$total”+“$n”,但这给了我一个错误,即操作数不是整数 有什么建议可以让我的工作吗 string=0 4 5 27 8 7 0 6 这将尝试将变量字符串设置为0,然后使用参数5 27 8

我一直在谷歌上搜索并尝试不同的方法,但似乎没有任何效果

我有以下代码

string=0 4 5 27 8 7 0 6

total=0

for n in "$string"; do
 total=$(($total + $n))
done
这样我想计算该字符串中所有数字的总和

我还尝试了
expr“$total”+“$n”
,但这给了我一个错误,即操作数不是整数

有什么建议可以让我的工作吗

string=0 4 5 27 8 7 0 6
这将尝试将变量
字符串设置为
0
,然后使用参数
5 27 8 7 0 6
调用命令
4

您需要引用以下值:

string="0 4 5 27 8 7 0 6"
当你引用它时,你需要删除引号;改变

for n in "$string"; do

这将尝试将变量
字符串设置为
0
,然后使用参数
5 27 8 7 0 6
调用命令
4

您需要引用以下值:

string="0 4 5 27 8 7 0 6"
当你引用它时,你需要删除引号;改变

for n in "$string"; do

你应使用:

total=$(( total + n ))
$(())
语句中的变量前面不需要
$
,您应该使用:

total=$(( total + n ))

$(())
语句中的变量之前不需要
$

不要在
in
子句中引用字符串,引用的字符串不会拆分为单词:

#! /bin/bash
total=0
string='0 4 5 27 8 7 0 6'
for n in $string ; do
    (( total += n ))
done
echo $total

不要在
子句中的
中引用字符串,引用的字符串不会拆分为单词:

#! /bin/bash
total=0
string='0 4 5 27 8 7 0 6'
for n in $string ; do
    (( total += n ))
done
echo $total


尝试在
for
循环的
第一行添加
echo“->$n”
,以查看出现了什么问题;-)另外,您确定第一行没有出现错误吗?echo$n列出了所有数字。为什么我会在第一行收到错误消息?这就是你想要的吗?因为
$total+04527278706
似乎不是您想要做的事情?一般来说,不要尝试使用空格分隔的字符串作为列表<代码>字符串=(0 4 5 27)
表示“${string[@]}”中的n;do
也可以工作,并将其概括为本身包含空格的元素列表。请尝试在
for
循环的第一行添加
echo“->$n”
,以查看出错的地方;-)另外,您确定第一行没有出现错误吗?echo$n列出了所有数字。为什么我会在第一行收到错误消息?这就是你想要的吗?因为
$total+04527278706
似乎不是您想要做的事情?一般来说,不要尝试使用空格分隔的字符串作为列表<代码>字符串=(0 4 5 27)
表示“${string[@]}”中的n;do
也可以工作,并将其推广到本身包含空格的元素列表中。尝试过,没有任何区别。我通过运行“$(du-a“$var”| cut-f1)”将数字存储在字符串中,如果这可能很重要的话。字符串上的引号是问题所在。尝试过,没有任何区别。我通过运行“$(du-a“$var”| cut-f1)”将数字存储在字符串中,如果这可能很重要的话。字符串上的引号是问题所在。没错,但它们是无害的。这并不能回答问题。@Keith true,老实说,我只读了标题和给定的代码,在那里进行加法。。我不认为这个问题和标题说的不完全一样!下次我会更小心的,thanks@bew78支持的规则之一:永远不要相信要求支持的人所声称的任何事情,因为他们在与他们的问题相关的事情上是不可信的。如果他们完全掌握了情况,就不会寻求帮助;-)始终验证并查看上下文。;-)@基思·汤普森:在这种情况下,它们是无害的,但是在计算之前,它们被展开了。比较以下结果:
echo$((n=n+1,x=n+1))
echo$((n=$n+1,x=$n+1))
正确,但它们是无害的。这并不能回答问题。@Keith true,老实说,我只读了标题和给定的代码,在那里进行加法。。我不认为这个问题和标题说的不完全一样!下次我会更小心的,thanks@bew78支持的规则之一:永远不要相信要求支持的人所声称的任何事情,因为他们在与他们的问题相关的事情上是不可信的。如果他们完全掌握了情况,就不会寻求帮助;-)始终验证并查看上下文。;-)@基思·汤普森:在这种情况下,它们是无害的,但是在计算之前,它们被展开了。比较以下结果:
echo$((n=n+1,x=n+1))
echo$((n=$n+1,x=$n+1))