在编写shell脚本时,尽可能使用只读变量是否是良好的编程实践?或者它是否有任何缺点?例如,如果我想编写一些由多个脚本文件组成且使用不可变文件路径的脚本,那么声明这些路径是否有意义:
readonly LOGS
export LOGS
LOGS="/some/path"
另一个问题:将庞大而难读的Shell脚本代码拆分成单独的文件是个好主意吗?非常感谢您的回答。
听起来你可能认为readonly
比它实际上做的更多。首先,只读状态不会被导出到环境中或被子进程继承:
$ declare -rx LOGS=hello
$ LOGS=goodbye
bash: LOGS: readonly variable
$ bash -c 'echo "$LOGS"'
hello
$ bash -c 'LOGS=goodbye; echo "$LOGS"'
goodbye
$
只读变量的一个经典用途是与TMOUT
一起使用。将此变量设置为非零值将在TMOUT
秒的不活动时间(即没有键盘输入)后注销交互式终端会话。为了防止聪明用户覆盖设置,请使用readonly
:
readonly TMOUT=60
export TMOUT=0
exec bash
解决此问题。 如果需要保持 TMOUT
不再设置,可以使用 --norc
参数。 - Mark Reed
sh
。不能轻松完成的事情也不应该用Bash来完成。 - Jo Sogbd attach <pid>
)来破解Bash才能更改只读变量的值。 - user4401178