在 bash 中默认将所有变量设为只读和本地

在 bash 中默认将所有变量设为只读和本地

在构建bash脚本时,我在创建变量时使用了大量的readonlyand local -r。这会快速填满脚本并降低代码的可读性(并且重复性)。有没有办法(比如set脚本顶部的标志)来创建所有变量readonly和/或local -r默认?

加上额外的警告,它必须在3.2.57(1)-releasemacOS 上运行。

我很确定这是不可能的,但想确定一下。

请不要回答“放弃bash并使用正确的脚本语言”。我也使用其他脚本语言。bash脚本有其用武之地,我喜欢对它们进行编码。

答案1

有没有办法(比如在脚本顶部设置标志)使所有变量默认为只读和/或本地 -r ?

否,除非您将源代码编辑为bash.

但是,您可以声明别名,以便减少将变量设置为只读所需的语义糖。

例如,

#!/bin/bash
#
shopt -s expand_aliases
alias lr='local -r'

demo() {
    lr a=123
    echo "$a"
    ((a++))      # Correctly fails with "a: readonly variable"
}

demo

答案2

通过使用宣布函数您可以使变量只读。当在函数中使用时宣布使变量成为局部变量。

语法为宣布这是:

declare arg VARIABLE=value

要使变量只读,您可以使用-r争论:

declare -r num=12

更多内容可以在这里找到:http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_10_01.html

不确定这是否正是您正在寻找的,但我认为它与您使用 BASH 所能获得的一样好

相关内容