5
#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 的所有规则一样......

有什么我可以使用的功能吗?我不想重新发明轮子...

4

2 回答 2

8

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

myfunc() {
    if [[ "$1" =~ ^[a-z][a-zA-Z0-9_]*$ ]]
    then
        echo "$1: valid"
    else
        echo "$1: invalid"
    fi
}
于 2012-11-08T17:24:49.093 回答
2

对于 bash 变量的上下文, dogbane 的答案几乎是完整的,但尚未更新以反映包含完整工作验证器的最终评论。根据他对他的回答的评论,这是有意的。此答案提供了一个函数,该函数对所有有效名称的计算结果都为真,并且可以用作条件,而不是返回一个必须与某物进行比较的值。另外,它可以跨多个 shell 使用。

 
功能:

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\""
于 2019-03-15T01:13:12.623 回答