用于递增变量的bash替换调用

时间:2015-04-16 16:59:07

标签: bash command-substitution

我正在尝试定义一个返回增量id的bash函数 我可以使用bash替换直接访问:

#!/bin/bash

getId() {
        echo "$x"
        x=$((x+1))
}

x=0
echo "id1: $(getId)"
echo "id2: $(getId)"

然而,变量没有增加,我无法弄清楚原因。

id1: 0
id2: 0

请问,是否有人对此行为有解释?

3 个答案:

答案 0 :(得分:2)

getId() {
  echo "$x"
  ((x++))
}
x=0
echo -n "id1: "
getId
echo -n "id2: "
getId

输出:

id1: 0
id2: 1

答案 1 :(得分:1)

我知道在子shell调用中使用你的语法(在echo行中)没有简单的方法。

替代方案是:

#!/bin/bash

export x=0

incId() {
        #echo "$x"
        (( x += 1))
}

incId
echo "id1: $x"
incId
echo "id2: $x"

但是在这里你需要使用echo-line-incId函数调用来增加id。

它也从1开始计数,而不是0。

使用let shell命令也是更好的数学方法。

使用(( ... ))right way to do shell arithmetic

答案 2 :(得分:1)

不妨让它变得通用:

incr() { (( $1 += ${2:-1} )); }

示例:

incr x   ; echo $x  # => 1
incr x   ; echo $x  # => 2
incr x  4; echo $x  # => 6
incr x -2; echo $x  # => 4