LINUX.ORG.RU

Сравнение переменных по wildcard

 ,


0

1

Как реализовать в скрипте на bash?
Можно сделать так, если строка с образцом заданная

var1="Hello World!"
if [[ "$var1" == "Hello "*"!" ]]; then echo "Yes"; fi

Но что делать, если маска берётся извне, и звёздочки уже в переменной?
Скажем, такой пример
var1="/Windows XP/ru_windows_xp_professional_with_service_pack_3_x86_cd_vl.iso"
var2="/Windows */ru_*.iso"

И строки могут содержать пробелы, разные скобочки, символ «равно» и прочие знаки

Ответ на: комментарий от TheAnonymous

Маска [ * ] эквивалентна просто звездочке как простому символу, то есть

$ var="*"
$ mask="[*]"
$ [[ -z "${var##$mask}" ]] && echo Ok
Ok
$ var="[hello]"
$ mask="\[*\]"
$ [[ -z "${var##$mask}" ]] && echo Ok
Ok

Надо выбрать, либо вы работаете с wilcard-ами, либо со своими собственными о них представлениями и парсите посимвольно тогда сами.

PS: обратите внимание, в первоначальном варианте не всегда будет срабатывать, правильнее два ##

vodz ★★★★★
()
Последнее исправление: vodz (всего исправлений: 2)
Ответ на: комментарий от vodz

либо вы работаете с wilcard-ами, либо со своими собственными о них представлениями

Я понимаю wildcard, как в шиндошс, служебные символы только * и ?

C:\>dir /B
autoexec.bat
b[a]
config.sys
PerfLogs
Program Files
Users
Windows

C:\>dir /B "b[*]"
b[a]


А здесь, стало быть, надо экранировать квадратные скобки. А ещё какие-то символы надо?

В принципе, так можно и регэксп сделать, заменить скобки, слеши, точки и прочие служебные символы, сами звёздочки на ".*", потом матчить =~

TheAnonymous ★★★★★
() автор топика
Последнее исправление: TheAnonymous (всего исправлений: 1)
Ответ на: комментарий от TheAnonymous

Я понимаю wildcard, как в шиндошс, служебные символы только * и ?

В чём сложность сделать rtfm перед тем как писать и позориться?

потом матчить =~

Синтасис квадратных скобок в wildcard и regex одинаковый

vodz ★★★★★
()

Делай через цикл for.

Quasar ★★★★★
()
Ответ на: комментарий от Bfgeshka

Не, файлов нет, это просто для примера

TheAnonymous ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.