我正在尝试定义一个返回增量id的bash函数 我可以使用bash替换直接访问:
#!/bin/bash
getId() {
echo "$x"
x=$((x+1))
}
x=0
echo "id1: $(getId)"
echo "id2: $(getId)"
然而,变量没有增加,我无法弄清楚原因。
id1: 0 id2: 0
请问,是否有人对此行为有解释?
答案 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