4

我希望每次运行该脚本时都会增加脚本中的变量。像这样的东西:

#!/bin/bash    
n=0   #the variable that I want to be incremented
next_n=$[$n+1]
sed -i "2s/.*/n=$next_n/" ${0}
echo $n

会完成这项工作,但如果我在设置变量的行之前将其他行添加到脚本中并且我忘记更新该行,那就不太好了sed -i "2s/.*/n=$next_n/" ${0}

此外,我更喜欢不使用另一个文件来保存变量值。

还有什么想法?

4

2 回答 2

7
#!/bin/bash    
n=0;#the variable that I want to be incremented
next_n=$[$n+1]
sed -i "/#the variable that I want to be incremented$/s/=.*#/=$next_n;#/" ${0}
echo $n
于 2013-08-18T07:10:49.637 回答
6

脚本在子 shell 中运行,这意味着一旦脚本结束,它的变量就会被遗忘,并且不会传播到调用它的父 shell。要在当前 shell 中运行命令列表,您可以source编写脚本或编写函数。在这样的脚本中,简单

(( n++ ))

会起作用 - 但只有在从同一个外壳调用时。如果脚本应该在不同的 shell 中运行,或者即使在关闭并再次打开机器之后,将值保存在文件中是最简单和最好的选择。但是,将变量值存储在不同的文件中可能更容易,而不是脚本本身:

[[ -f saved_value ]] || echo 0 > saved_value
n=$(< saved_value)
echo $(( n + 1 )) > saved_value

在运行时更改脚本可能会产生奇怪的后果,尤其是当您更改脚本的大小时(可能发生在 9 → 10 时)。

于 2013-08-18T06:38:29.347 回答