如何测试变量是否是bash中的字符串?

时间:2015-03-08 14:23:38

标签: linux bash shell variables

我尝试了以下但没有成功

[root@OBAMA~]# bash
[root@OBAMA~]# a=HelloWorld

[root@OBAMA~]# [[ $a == [A-Za-z] ]] && echo "YES ITS STRING"

(命令不打印任何东西)

[root@OBAMA~]# [[ $a == [A-Z][a-z] ]] && echo "YES ITS STRING"

(命令不打印任何东西)

2 个答案:

答案 0 :(得分:1)

更改下面的命令。

$ [[ $a =~ [A-Za-z]+ ]] && echo "YES ITS STRING"
YES ITS STRING
  • 使用=~运算符针对正则表达式测试输入字符串。

  • 在字符类旁边添加+,以便它会重复前一个模式或令牌一次或多次。这是不必要的。

添加锚点,以便进行精确的字符串匹配。仅[[ $a =~ [A-Za-z] ]] && echo "YES ITS STRING"将打印字符串YES ITS STRING,因为变量a包含至少一个字母。

$ a="HelloWorld"
$ [[ $a =~ ^[A-Za-z]+$ ]] && echo "YES ITS STRING"
YES ITS STRING
$ a="Hello World"
$ [[ $a =~ ^[A-Za-z]+$ ]] && echo "YES ITS STRING"
$ 

答案 1 :(得分:1)

如何定义“字符串”

[[ -n $a ]] && echo variable a is not empty

[[ $a == *[[:alpha:]]* ]] && echo variable a contains a letter

shopt -s extglob failglob
[[ $a == +([[:alpha:]]) ]] && echo variable a only has letters

你的glob表达式不匹配,因为你检查你的变量只包含1个字符或2个字符。