变量值加 1(shell 编程)
Posted
技术标签:
【中文标题】变量值加 1(shell 编程)【英文标题】:Increment variable value by 1 (shell programming) 【发布时间】:2014-01-28 21:12:05 【问题描述】:我是shell编程的初学者,这听起来像是一个非常愚蠢的问题,但我似乎无法将变量值增加1。我看过tutorialspoint's Unix / Linux Shell Programming tutorial,但它只显示了如何添加两个变量。
我尝试了以下方法,但它们不起作用:
i=0
$i=$i+1 # doesn't work: command not found
echo "$i"
$i='expr $i+1' # doesn't work: command not found
echo "$i"
$i++ # doesn't work*, command not found
echo "$i"
如何将变量的值加 1??
【问题讨论】:
对变量的赋值不会在表达式的 LHS 上以$
开头。
How to increment a variable in bash?
对于 expr ,它不起作用,因为它们必须是反引号 ( ` ) 而不是单引号 ( ' )
(only shows how to add together two variables
- 好吧,它们显示了文字总和的分配:val=`expr 2 + 2`
。)
【参考方案1】:
您可以像这样使用arithmetic expansion:
i=$((i+1))
或declare i
作为整数变量,并使用+=
运算符来增加其值。
declare -i i=0
i+=1
或使用((
construct。
((i++))
【讨论】:
第一个变体也适用于 dash(在许多系统上都是 sh)。其他两个没有。 另外两个不符合 POSIX - 我认为它们只是 bash。所以坚持第一个以获得最大的便携性。【参考方案2】:这些是我知道的方法:
ichramm@NOTPARALLEL ~$ i=10; echo $i;
10
ichramm@NOTPARALLEL ~$ ((i+=1)); echo $i;
11
ichramm@NOTPARALLEL ~$ ((i=i+1)); echo $i;
12
ichramm@NOTPARALLEL ~$ i=`expr $i + 1`; echo $i;
13
注意最后一个例子中的空格,还要注意这是唯一一个使用$i
的空格。
【讨论】:
【参考方案3】:expr的使用方法:
i=0
i=`expr $i + 1`
i++的使用方法
((i++)); echo $i;
在 gnu bash 中测试
【讨论】:
【参考方案4】:你可以使用bc
,因为它也可以做浮点数
var=$(echo "1+2"|bc)
【讨论】:
【参考方案5】:在 bash 中增加变量的方法不止一种,但您尝试的方法不正确。
您可以使用例如算术扩展:
i=$((i+1))
或仅:
((i=i+1))
或:
((i+=1))
甚至:
((i++))
或者你可以使用 let:
let "i=i+1"
或仅:
let "i+=1"
甚至:
let "i++"
另请参阅:http://tldp.org/LDP/abs/html/dblparens.html。
【讨论】:
使用/bin/bash -e
((i++))
停止执行(退出代码 1)。 /bin/sh -e
((i=i+1))
无效,((i+=1))
和 ((i++))
是不允许的。而let
是not POSIX-compliant。
是的,((i++))
返回 1,所以返回码是 1。或者可能是因为 i
如果未初始化(并在单个命令中运行)就不存在?以上是关于变量值加 1(shell 编程)的主要内容,如果未能解决你的问题,请参考以下文章