将变量值增加1(shell编程)

Com*_*erd 22 variables debugging shell ubuntu command-line

我是shell编程的初学者,它听起来像一个非常愚蠢的问题,但我似乎无法将变量值增加1.我已经看过教程,但它只显示如何将2个变量加在一起

我尝试了以下方法,但它不起作用

i=0

$i=$i+1 # doesnt work , command not found

echo "$i"

$i='expr $i+1' # doesnt work , command not found

echo "$i"

$i++ # doesnt work , command not found

echo "$i"
Run Code Online (Sandbox Code Playgroud)

如何将变量的值增加1?

Gab*_* L. 51

你可以试试这个:

i=0
i=$((i+1))
Run Code Online (Sandbox Code Playgroud)

  • 第一个变体也适用于 dash(在许多系统上为 sh)。另外两个则没有。 (10认同)
  • 另外两个不符合 POSIX 标准——我认为它们只是 bash。因此,请坚持第一个以获得最大的可移植性。 (2认同)

zah*_*hid 12

在bash中增加变量的方法不止一种,但您尝试的方法不正确.

您可以使用例如算术扩展:

i=$((i+1))
Run Code Online (Sandbox Code Playgroud)

或仅:

((i=i+1))
Run Code Online (Sandbox Code Playgroud)

要么:

((i+=1))
Run Code Online (Sandbox Code Playgroud)

甚至:

((i++))
Run Code Online (Sandbox Code Playgroud)

或者您可以使用let:

let "i=i+1"
Run Code Online (Sandbox Code Playgroud)

或仅:

let "i+=1"
Run Code Online (Sandbox Code Playgroud)

甚至:

let "i++"
Run Code Online (Sandbox Code Playgroud)

另见:http://tldp.org/LDP/abs/html/dblparens.html.

  • 使用 `/bin/bash -e` `((i++))` 停止执行(退出代码 1)。对于 `/bin/sh -e` `((i=i+1))` 不起作用,`((i+=1))` 和 `((i++))` 是不允许的。并且 `let` [不符合 POSIX 标准](/sf/answers/1900809431/)。 (2认同)

BMW*_*BMW 8

expr的使用方法:

i=0
i=`expr $i + 1`
Run Code Online (Sandbox Code Playgroud)

i++的使用方法

((i++)); echo $i;
Run Code Online (Sandbox Code Playgroud)

在 gnu bash 中测试