linux shell中的整数加法

tjrkku2a  于 2023-03-01  发布在  Linux
关注(0)|答案(8)|浏览(131)

下面是我的简单shell代码。我希望结果是2。shell将所有内容都视为字符串。我如何才能做到这一点?

num=1
num=$(( $num + 1 ))

编辑:
完整代码:如果我想从1打印到10,这有什么问题吗?

#! /bin/bash

num=1
until test $num -eq 10
do
    num=$(( $num + 1 ))
    echo $num
done
dgenwo3n

dgenwo3n1#

bash中,您不需要做任何特殊操作:

$ num=1
$ num=$(( $num + 1 ))
$ echo $num
2
e0bqpujr

e0bqpujr2#

@托尼奥;请不要提倡使用subshell('...或$(...))构造,当不需要它们时(为了最大限度地保持混乱,$((...))不是一个sub-shell构造)。即使数据量很小,sub-shell也会对性能造成巨大的影响。同样的道理也适用于任何使用外部程序来做一些可以用内置shel来做的事情的地方。
示例:

num=1
    time while [[ $num -lt 10000 ]]; do
            num=$(( num+1 ))
    done
    echo $num
    num=1
    time while /bin/test $num -lt 10000; do
            num=$( /bin/expr $num + 1 )
    done
    echo $num

输出(在Linux上的ksh中运行):

real    0m0.04s
user    0m0.04s
sys     0m0.01s
10000

real    0m20.32s
user    0m2.23s
sys     0m2.92s
10000

......因此运行时系数为250,CPU时间系数为100。我承认我使用的示例有些夸张,明确要求绕过所有内置函数,但我认为这一点已经得到了说明:创建新进程是昂贵的,尽可能避免它,并且了解您的shell以识别新进程创建的位置。

omhiaaxx

omhiaaxx3#

这可能对你有用:

num=1; ((num++)); echo $num
2

num=1; echo $((++num))
2

for循环

for num in {1..10}; do echo $num; done

或(至少在bash中)

for ((num=1; num<=10; num++)) { echo $num; }

第二个循环在涉及更多编程时更有用:

for (( num=1,mun=10; num<=10; num++,mun--)) { echo $num $mun; }
ppcbkaq5

ppcbkaq54#

你刚刚做了:

$ num=1; num=$(( $num + 1 ));echo $num
2

注意:您不需要在$(( ))中引用变量。另外,您可以只使用$((num++))

2q5ifsrm

2q5ifsrm5#

您没有指定使用哪个shell,但我知道的最简洁的形式是这样的(至少在bash中有效):

num=$[num+1]

如果仅递增1并更改变量本身,而不是打印/赋值,则:

((num++))

是一个更好/更优雅的解决方案。见罗布麻的答案。
如果循环遍历这些值,我将使用以下形式:

for i in `seq 1 10`; do
   echo $i
done
vqlkdk9b

vqlkdk9b6#

使用((num++))作为递增num的简写。

$ num=1
$ ((num++))
$ echo $num
2
n3ipq98p

n3ipq98p7#

试试这个

$ num=1; num=`expr $num + 1`; echo $num;

编辑:
更有效的做法是:

num=$(( num + 1 ))

感谢@Charles Duffy的评论。

ct3nt3jp

ct3nt3jp8#

对我有用

$ num=1
$ num=$(( $num + 1 ))
$ echo $num
2

你得到什么输出?
阅读更多关于bash算术@tldp的信息

编辑

要在bash中执行某项操作10次,可以使用(使用大括号扩展)

$ for i in {1..10}; do echo $i; done
1
2
3
4
5
6
7
8
9
10

但是,不能在{}之间使用变量。如果是这种情况,请改用seq

相关问题