变量值加 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 编程)的主要内容,如果未能解决你的问题,请参考以下文章

shell 编程

关于shell变量值的截取-通过分隔符-去除前后匹配到的内容

shell变量

shell默认变量值

Linux拓展之Shell默认变量值

执行操作后的变量值,我的题解首次优于官方