如何测试 bash 中的变量是否为字符串?
How do I test if a variable is a string in bash?
我尝试了以下但没有成功
[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"
(该命令不打印任何内容)
像下面这样更改您的命令。
$ [[ $a =~ [A-Za-z]+ ]] && echo "YES ITS STRING"
YES ITS STRING
使用 =~
运算符根据正则表达式测试输入字符串。
在字符class旁边添加+
,这样它会重复前面的模式或标记一次或多次。这里是没有必要的。
添加锚点,以便进行精确的字符串匹配。 [[ $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"
$
你怎么定义"a string"
[[ -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 个字符。
我尝试了以下但没有成功
[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"
(该命令不打印任何内容)
像下面这样更改您的命令。
$ [[ $a =~ [A-Za-z]+ ]] && echo "YES ITS STRING"
YES ITS STRING
使用
=~
运算符根据正则表达式测试输入字符串。在字符class旁边添加
+
,这样它会重复前面的模式或标记一次或多次。这里是没有必要的。
添加锚点,以便进行精确的字符串匹配。 [[ $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"
$
你怎么定义"a string"
[[ -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 个字符。