在shell脚本中使用只读变量

use*_*379 8 unix linux bash shell

是否有良好的shell编程习惯,只要有可能就使用只读变量,或者它有任何缺点吗?例如,如果我想编写一些包含多个使用不可变文件路径的脚本文件的脚本,那么声明这样的路径是否有意义:

readonly LOGS
export LOGS 
LOGS="/some/path"
Run Code Online (Sandbox Code Playgroud)

另一个问题:将单片和冗长的读取shell脚本代码拆分成单独的文件是一个好主意吗?非常感谢你的回答.

Mar*_*eed 12

听起来你可能认为这readonly比它确实做得更多.首先,readonly状态不会导出到环境中或由子进程继承:

$ declare -rx LOGS=hello
$ LOGS=goodbye
bash: LOGS: readonly variable
$ bash -c 'echo "$LOGS"'
hello
$ bash -c 'LOGS=goodbye; echo "$LOGS"'
goodbye
$ 
Run Code Online (Sandbox Code Playgroud)


Ron*_*ell 5

一般来说,使用只读变量(使用任何语言)和模块化程序(使用任何语言)都是一件好事.

只读变量可以防止常见的错误来源,并有助于提高可读性和可维护性.知道你可以依赖变量的值使你能够更好地推理你的程序,并在以后对该变量做出假设 - 如果变量是可变的则你不能做的事情.

模块化提高了可维护性和可重用性.更多模块通常意味着可以在不同情况下重复使用的更细粒度的单元,更容易阅读的更短代码,以及如果您的模块是独立的,可以破坏修改的部件之间的相互作用更少.


JRF*_*son 5

只读变量的经典用法是TMOUT.将此变量设置为非零值将在TMOUT几秒钟不活动(即没有键盘输入)后注销交互式终端会话.要阻止智能用户覆盖设置,请使用readonly:

readonly TMOUT=60
Run Code Online (Sandbox Code Playgroud)

完成后,没有办法:

export TMOUT=0
Run Code Online (Sandbox Code Playgroud)

  • 使用“exec bash”轻松解决。如有必要,请使用“--norc”以防止再次设置“TMOUT”。 (3认同)