我正在尝试定义一个 bash 函数,它返回一个递增的 id,我可以使用 bash 替换直接访问它:
#!/bin/bash
getId() {
echo "$x"
x=$((x+1))
}
x=0
echo "id1: $(getId)"
echo "id2: $(getId)"
但是变量没有增加,我不知道为什么。
id1: 0 id2: 0
请问,有人对这种行为有解释吗?
我正在尝试定义一个 bash 函数,它返回一个递增的 id,我可以使用 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: 0 id2: 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
我知道没有简单的方法可以使用您拥有的语法(在 echo 行中)在子 shell 调用中执行此操作。
一个替代方案是:
#!/bin/bash
export x=0
incId() {
#echo "$x"
(( x += 1))
}
incId
echo "id1: $x"
incId
echo "id2: $x"
但是在这里,您需要通过外线incId
函数调用来增加 id。
它也从 1 开始计数,而不是 0。
使用let
shell 命令也是做数学的更好方法。
使用(( ... ))
是进行 shell 算术的正确方法