繁体   English   中英

bash脚本中的增量编号(变量)

[英]Increment Number (variable) in bash script

我需要在bash脚本中增加一个变量。 但是在脚本完成后,应该使用新编号导出变量,并在下次运行脚本时使用该变量。

IN MY SHELL

    set x=0

SCRIPT

" If something is true.. do"
export x=$(($x+1)) //increment variable and save it for next time
if [ $x -eq 3 ];then 
    echo test
fi
exit

你不能在两个进程之间将变量保存在内存中; 该值需要存储在某处并在下次启动时读取。 最简单的方法是使用文件。 (支持“通用”变量的fish shell使用一个单独的进程,它始终在启动和退出时与新shell进行通信。但即使这个“master”进程也需要使用一个文件来保存它们退出时的值。 )

# Ensure that the value of x is written to the file
# no matter *how* the script exits (short of kill -9, anyway)
x_file=/some/special/file/somewhere
trap 'printf '%s\n' "$x" > "$x_file"' EXIT

x=$(cat "$x_file")   # bash can read the whole file with x=$(< "$x_file")
# For a simple number, you only need to run one line
# read x < "$x_file"
x=$((x+1))
if [ "$x" -eq 3 ]; then
   echo test
fi
exit

导出变量只是一种方式。 导出的变量将具有shell的所有子进程的正确值,但是当子进程退出时,父进程将丢失更改的值。 实际上,父进程只会看到变量的初始值。

这是件好事。 因为所有子进程都可能会更改导出变量的值,所以可能会为其他子进程搞乱(如果更改值是双向的)。

你可以做两件事之一:

  • 让脚本在退出之前将值保存到文件中,并在启动时从文件中读取它
  • 使用source your-script.bash. your-script.bash . your-script.bash 这样,shell就不会创建子进程,并且变量会在同一进程中更改

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM