Bash命令检查变量名是否有效

时间:2012-11-08 17:16:39

标签: linux shell naming-conventions variable-names

#check if the name is valid
function myfunc()
{
    #check "${1}"
    #echo "valid/invalid"
}

#these should return valid
myfunc "my_number"
myfunc "my_number1"

#these should return ivalid 
myfunc "1my_number"
myfunc "1my _number"
myfunc "my number"
myfunc "my_number?"

等变量名只能有字母,数字(但不能在开头),...和java的所有规则一样......

我可以使用任何功能吗?我不想重新发明轮子......

2 个答案:

答案 0 :(得分:6)

将变量名称与正则表达式匹配,如下所示:

myfunc() {
    if [[ "$1" =~ ^[a-z][a-zA-Z0-9_]*$ ]]
    then
        echo "$1: valid"
    else
        echo "$1: invalid"
    fi
}

答案 1 :(得分:1)

对于bash变量,

dogbane's answer几乎是完整的,但是尚未进行更新以反映包含完全有效的验证器的最终注释。根据他对答案的评论,这是有意的。该答案提供了一个对所有有效名称都为true的函数,可以用作条件,而不是返回必须与某些事物进行比较的值。另外,它可以跨多个外壳使用。


函数:

isValidVarName() {
    echo "$1" | grep -q '^[_[:alpha:]][_[:alpha:][:digit:]]*$' && return || return 1
}


bash中的用法示例:

key=...
value=...

if isValidVarName "$key"; then
    eval "$key=\"$value\""
fi


# or it might simply look like this

isValidVarName "$key" && eval "$key=\"$value\""