2015-03-08 2 views
0

Я попытался следующие, но без успехаКак проверить, является ли переменная строкой в ​​bash?

[[email protected]~]# bash 
[[email protected]~]# a=HelloWorld 

[[email protected]~]# [[ $a == [A-Za-z] ]] && echo "YES ITS STRING" 

(команда не печатает ничего)

[[email protected]~]# [[ $a == [A-Z][a-z] ]] && echo "YES ITS STRING" 

(команда не печатает что-нибудь)

ответ

1

Изменение ваша команда LKE ниже.

$ [[ $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

как вы определяете «строку»

[[ -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 выражения не соответствие, потому что ваша проверка, что переменные содержат только один символ или 2 символов.

+0

Как вы определяете строку «строка» -> строка должна содержать только символы (A-Z/a-z) – maihabunash

+0

выбирать между установленным регулярным выражением Avinash или моим расширенным glob, оба будут удовлетворять этому требованию –

Смежные вопросы