2013-09-10 2 views
0

Я делаю bash, я пытаюсь проверить, есть ли подстрока «world» в данной переменной x. У меня часть кода работает. Но другой не работает. Я хочу, чтобы выяснить, почемуbash substring regex matching wildcard

Первый один работает

x=helloworldfirsttime 
world=world 
if [[ "$x" == *$world* ]];then 
    echo matching helloworld 

второй не работает

x=helloworldfirsttime 
if [[ "$x" == "*world*" ]];then 
    echo matching helloworld 

Как сделать вторую одну работу без использования переменной как 1-го метода

Может кто-то исправить второй для меня .. спасибо

ответ

3

Просто удалите q uotes:

x=helloworldfirsttime 
if [[ "$x" == *world* ]]; then 
    echo matching helloworld 
fi 

Обратите внимание, что это не регулярное выражение (регулярное выражение для этого будет выглядеть примерно так .*world.*). Шаблон в Баше описано здесь:
http://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html

2
x=helloworldfirsttime 
$ if [[ "$x" == *world* ]]; then echo MATCHING; fi 
MATCHING 

Это работает, потому что встроенный [[ оператор в Bash обрабатывает правостороннюю сторону теста == как шаблон:

Когда == и используются операторы !=, строка справа от оператора используется в качестве шаблона и сопоставления шаблонов.

0

В следующий раз, если вы хотите, чтобы обеспечить скороговорки с пробелами можно просто процитировать его вокруг "" или '', только то, что вы должны поместить шаблон символов снаружи:

[[ "$x" == *"hello world"* ]] 

[[ "$x" == *'hello world'* ]] 

[[ "$x" == *"$var_value_has_spaces"* ]]