Умова помилки регулярного вираження


14
string=123456

if [ $string == 123456 ]; then
echo 123
fi

Це працює добре, але якщо я зміню == на = ~, я отримую цю помилку:

./test: line 3: [: =~: binary operator expected

Використання =~в цьому випадку неправильне. =~порівнює малюнок (лівий бік завдання) з регулярним виразом regexна правій стороні відміни. Регулярний вираз у його найпростішій формі передається на кшталт'[0-9][0-9]'
Валентин Байрамі

9
@ val0x00ff, але 123456це дійсний RE
roaima

@roaima погодився, проте регекс відомий своїм двигуном, зворотним посиланням, набором символів, метасимволами, що позначають початок рядка, закінчення рядка тощо
Валентин Байрамі

Відповіді:


29

Bash «S регулярний вираз відповідність працює тільки в подвійних квадратних дужках[[ ... ]]:

string=123456
if [[ "$string" =~ 123456 ]]; then echo 123; fi
123

@Kusalananda: Щодо редагування, лапки не потрібні на лівій частині виразу [[ ... ]]з подвійною дужкою , оскільки там не відбувається розщеплення слів або розширення імені. Вони потрібні лише при використанні одинарних дужок [ ... ](обидві сторони) та праворуч вираз подвійної дужки.
user000001

@ user000001, хоча ви правильні, набагато краще просто цитувати всі змінні за допомогою рефлексу, якщо немає необхідності цього не робити. Це набагато безпечніша звичка.
Джо

@Joe: Погодився, коли сумніваюся, цитую ... Я це згадав лише тому, що це було редагуванням вже правильної відповіді. Якби це було з першої редакції, я б це не коментував.
користувач000001
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.