这是我简单的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
答案 0 :(得分:13)
在bash
中,您无需执行任何特殊操作:
aix@aix:~$ num=1
aix@aix:~$ num=$(( $num + 1 ))
aix@aix:~$ echo $num
2
答案 1 :(得分:3)
@tonio;请不要提倡在不需要时使用子shell(`...或$(...))构造(为了避免混淆,$((...))不是子shell构造)。即使使用相当少量的数据,子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.我承认我使用的例子是夸张的,明确要求绕过所有内置函数,但我认为重点是make:创建新流程很费劲,尽可能避免,并且知道你的shell以识别创建新流程的位置。
答案 2 :(得分:1)
你刚刚做了:
$ num=1; num=$(( $num + 1 ));echo $num
2
注意 :您无需在$(( ))
内引用变量。此外,您只需使用$((num++))
答案 3 :(得分:1)
这可能对您有用:
num=1; ((num++)); echo $num
2
或
num=1; echo $((++num))
2
for loops
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; }
答案 4 :(得分:0)
试试这个
$ num=1; num=`expr $num + 1`; echo $num;
答案 5 :(得分:0)
使用((num++))
作为递增num
的简写。
$ num=1
$ ((num++))
$ echo $num
2
答案 6 :(得分:0)
你没有指定你正在使用哪个shell,但我知道的最简洁的形式是这个(至少在bash中起作用):
num=$[num+1]
如果仅增加一个并更改变量本身而不是打印/分配,则:
((num++))
是更好/更优雅的解决方案。请参阅dogbane的答案。
如果循环遍历值,我会改用这个形式:
for i in `seq 1 10`; do
echo $i
done
答案 7 :(得分:-1)
适合我
$ num=1
$ num=$(( $num + 1 ))
$ echo $num
2
你得到什么输出?
详细了解bash Arithmetic @ tldp
要在bash中执行10次操作,您可以使用(使用brace-expansion}
$ for i in {1..10}; do echo $i; done
1
2
3
4
5
6
7
8
9
10
但是,您无法在{}
之间使用变量。如果是这种情况,请改用seq
。
答案 8 :(得分:-1)
您可以使用以下内容:
num=1
num=`expr $num + 1`
它也适用于非bash shell,如ksh。