这是我的简单的shell代码。 我想要的结果是2.Shell视为一个string的一切。 我怎样才能做到这一点?
num=1 num=$(( $num + 1 ))
编辑:
完整的代码:如果我想打印从1到10,这是什么错误?
#! /bin/bash num=1 until test $num -eq 10 do num=$(( $num + 1 )) echo $num done
在bash
,你不需要做任何特别的事情:
aix@aix:~$ num=1 aix@aix:~$ num=$(( $num + 1 )) aix@aix:~$ echo $num 2
@tonio; 请不要提倡在不需要时使用subshell(`…或$(…))结构(为了避免混淆到最大值,$((…))不是一个子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运行):
实际0m0.04s 用户0m0.04s sys 0m0.01s 10000 真正的0m20.32s 用户0m2.23s sys 0m2.92s 10000
…所以运行时间因子为250,CPU时间因子为100.我承认我使用的例子是一个夸张的例子,明确要求绕过所有内置函数,但我认为这一点是:创建新的进程是费用支出,尽可能地避免它,并且知道你的shell来识别新进程的创建地点。
你刚刚做了:
$ num=1; num=$(( $num + 1 ));echo $num 2
注意 :您不需要在$(( ))
内引用变量。 另外,你可以使用$((num++))
这可能适合你:
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; }
使用((num++))
作为递增num
简写。
$ num=1 $ ((num++)) $ echo $num 2
尝试这个
$ num=1; num=`expr $num + 1`; echo $num;
你没有指定你正在使用的shell,但是我知道的最简洁的形式是这个(至少在bash中):
num=$[num+1]
如果只是递增1并且改变变量本身而不是打印/赋值,那么:
((num++))
是一个更好/更优雅的解决方案。 看到dogbane的答案。
如果循环的值,我会使用这种形式,而不是:
for i in `seq 1 10`; do echo $i done
为我工作
$ num=1 $ num=$(( $num + 1 )) $ echo $num 2
你会得到什么输出?
阅读更多关于bash Arithmetic @ tldp
要在bash中做10次,可以使用(使用括号扩展 )
$ for i in {1..10}; do echo $i; done 1 2 3 4 5 6 7 8 9 10
但是,您不能在{}
之间使用变量。 如果是这种情况,请使用seq
代替。
你可以使用像这样的东西:
num=1 num=`expr $num + 1`
它也将使用非bash shell,如ksh。