Bash:每次运行该脚本时,都会从脚本中增加一个变量

Rad*_*anu 3 bash increment auto-increment

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

#!/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
Run Code Online (Sandbox Code Playgroud)

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

另外,我更喜欢不使用另一个保存变量值的文件.

其他一些想法?

eee*_*yes 6

#!/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
Run Code Online (Sandbox Code Playgroud)


cho*_*oba 5

脚本在子shell中运行,这意味着一旦脚本结束就会忘记它的变量,并且它们不会传播到调用它的父shell.要在当前shell中运行命令列表,您可以使用source脚本,也可以编写函数.在这样的剧本中,平原

(( n++ ))
Run Code Online (Sandbox Code Playgroud)

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

[[ -f saved_value ]] || echo 0 > saved_value
n=$(< saved_value)
echo $(( n + 1 )) > saved_value
Run Code Online (Sandbox Code Playgroud)

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