下面是我的简单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
dgenwo3n1#
在bash中,您不需要做任何特殊操作:
bash
$ num=1 $ num=$(( $num + 1 )) $ echo $num 2
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以识别新进程创建的位置。
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; }
ppcbkaq54#
你刚刚做了:
$ num=1; num=$(( $num + 1 ));echo $num 2
注意:您不需要在$(( ))中引用变量。另外,您可以只使用$((num++))
$(( ))
$((num++))
2q5ifsrm5#
您没有指定使用哪个shell,但我知道的最简洁的形式是这样的(至少在bash中有效):
num=$[num+1]
如果仅递增1并更改变量本身,而不是打印/赋值,则:
((num++))
是一个更好/更优雅的解决方案。见罗布麻的答案。如果循环遍历这些值,我将使用以下形式:
for i in `seq 1 10`; do echo $i done
vqlkdk9b6#
使用((num++))作为递增num的简写。
num
$ num=1 $ ((num++)) $ echo $num 2
n3ipq98p7#
试试这个
$ num=1; num=`expr $num + 1`; echo $num;
编辑:更有效的做法是:
num=$(( num + 1 ))
感谢@Charles Duffy的评论。
ct3nt3jp8#
对我有用
你得到什么输出?阅读更多关于bash算术@tldp的信息
要在bash中执行某项操作10次,可以使用(使用大括号扩展)
$ for i in {1..10}; do echo $i; done 1 2 3 4 5 6 7 8 9 10
但是,不能在{}之间使用变量。如果是这种情况,请改用seq。
{}
seq
8条答案
按热度按时间dgenwo3n1#
在
bash
中,您不需要做任何特殊操作:e0bqpujr2#
@托尼奥;请不要提倡使用subshell('...或$(...))构造,当不需要它们时(为了最大限度地保持混乱,$((...))不是一个sub-shell构造)。即使数据量很小,sub-shell也会对性能造成巨大的影响。同样的道理也适用于任何使用外部程序来做一些可以用内置shel来做的事情的地方。
示例:
输出(在Linux上的ksh中运行):
......因此运行时系数为250,CPU时间系数为100。我承认我使用的示例有些夸张,明确要求绕过所有内置函数,但我认为这一点已经得到了说明:创建新进程是昂贵的,尽可能避免它,并且了解您的shell以识别新进程创建的位置。
omhiaaxx3#
这可能对你有用:
或
for循环
或(至少在bash中)
第二个循环在涉及更多编程时更有用:
ppcbkaq54#
你刚刚做了:
注意:您不需要在
$(( ))
中引用变量。另外,您可以只使用$((num++))
2q5ifsrm5#
您没有指定使用哪个shell,但我知道的最简洁的形式是这样的(至少在bash中有效):
如果仅递增1并更改变量本身,而不是打印/赋值,则:
是一个更好/更优雅的解决方案。见罗布麻的答案。
如果循环遍历这些值,我将使用以下形式:
vqlkdk9b6#
使用
((num++))
作为递增num
的简写。n3ipq98p7#
试试这个
编辑:
更有效的做法是:
感谢@Charles Duffy的评论。
ct3nt3jp8#
对我有用
你得到什么输出?
阅读更多关于bash算术@tldp的信息
编辑
要在bash中执行某项操作10次,可以使用(使用大括号扩展)
但是,不能在
{}
之间使用变量。如果是这种情况,请改用seq
。