测试变量是否为只读

时间:2010-12-14 15:36:40

标签: bash

要测试变量是否为只读,有以下丑陋的黑客:

# True if readonly
readonly -p | egrep "declare -[:lower:]+ ${var}="

# False if readonly
temp="$var"; eval $var=x 2>/dev/null && eval $var=\$temp

有更优雅的解决方案吗?

2 个答案:

答案 0 :(得分:4)

使用子shell似乎有效。都有本地和导出的变量。

$ foo=123
$ bar=456

$ readonly foo

$ echo $foo $bar
123 456

$ (unset foo 2> /dev/null) || echo "Read only"
Read only

$ (unset bar 2> /dev/null) || echo "Read only"
$

$ echo $foo $bar
123 456           # Still intact :-)

重要的是,即使是你的RW(在这种情况下为$ bar)还没有在你当前的shell中设置这个子shell。

使用bash和ksh进行测试。

答案 1 :(得分:0)

您还可以向变量添加一个空字符串,它仍然保留其值,但比使用子shell更快,例如:

foo+= 2>/dev/null || echo "Read only"

捕获为一个函数,它是:

is-writable() { eval "$1+=" >2/dev/null; }