增加变量的bash替换调用



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

#!/bin/bash
getId() {
echo "$x"
x=$((x+1))
}
x=0
echo "id1: $(getId)"
echo "id2: $(getId)"

然而,变量没有增加,我不知道为什么。

id1: 0
id2: 0

请问,有人对这种行为有解释吗?

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

输出:

id1:0id2:1

据我所知,使用您所拥有的语法(在回显行中),在子shell调用中没有简单的方法可以做到这一点。

另一种选择是:

#!/bin/bash
export x=0
incId() {
#echo "$x"
(( x += 1))
}
incId
echo "id1: $x"
incId
echo "id2: $x"

但在这里,您需要回显行外的incId函数调用来增加id。

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

使用letshell命令也是进行计算的更好方法

使用(( ... ))是进行外壳算术的正确方法

不妨将其通用化:

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

相关内容

  • 没有找到相关文章

最新更新