在bash脚本中,我有一个函数,在该函数中,我想检查传递的参数是否仅包含小写字母,数字和“ _”:
还要检查不仅是数字,而且只能以字母开头
代码:
function check_name () {
if [[ $1 != [a-z0-9\\_]; then
echo The name can contain only lowercase letters, numbers and _
return 1
fi
}
代码失败,因为条件始终为真并返回1
答案 0 :(得分:1)
您可以这样做:
[STEP 115] $ var=abc123_
[STEP 116] $ [[ -z ${var//[_[:digit:][:lower:]]} ]] && echo yes || echo no
yes
[STEP 117] $ var=ABC
[STEP 118] $ [[ -z ${var//[_[:digit:][:lower:]]} ]] && echo yes || echo no
no
[STEP 119] $
或
[STEP 125] $ var=abc123_
[STEP 126] $ [[ $var == +([_[:digit:][:lower:]]) ]] && echo yes || echo no
yes
[STEP 127] $ var=ABC
[STEP 128] $ [[ $var == +([_[:digit:][:lower:]]) ]] && echo yes || echo no
no
[STEP 129] $
或
[STEP 130] $ var=abc123_
[STEP 131] $ [[ $var =~ ^[_[:digit:][:lower:]]+$ ]] && echo yes || echo no
yes
[STEP 132] $ var=ABC
[STEP 133] $ [[ $var =~ ^[_[:digit:][:lower:]]+$ ]] && echo yes || echo no
no
[STEP 134] $