Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Как определить наличие подстроки в строке?  (Прочитано 1197 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн jack_solovey

  • Автор темы
  • Активист
  • *
  • Сообщений: 905
  • Mate, и никаких Unity
    • Просмотр профиля
Здравствуйте.
Требуется в баш скрипте определить, имеется ли в строке переданной параметром в скрипт, определенная подстрока.
например имеется ли в $1 кусок 'zzz'
Нагуглил массу противоречивых советов. Но большинство из них касается поиска текста в файле и файлах.
А вот как искать в строковой переменной не могу понять.
Имеется ли аналог функции pos/posindex/index в баше?

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Если пофиг на совместимость с sh то [[ "$1" =~ zzz ]]Более портабельно использовать casecase $1 in
    *zzz*) … ;;
esac
Имеется ли аналог функции pos/posindex/index в баше?
Есть expr для сравнений с операторами match и index, но это уже лишнее.
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн jack_solovey

  • Автор темы
  • Активист
  • *
  • Сообщений: 905
  • Mate, и никаких Unity
    • Просмотр профиля
Спасибо, получилось.

пример, если в имени файла $st содержится 'sql' и 'full' то...
if [ `expr "$st" : '.*\(sql\)'` = "sql" ] && [ `expr "$st" : '.*\(full\)'` = "full" ]
then ...
else ...
fi

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
case $st in
*sql|*full) … ;;
         *)… ;;
esac
Насколько проще…
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн jack_solovey

  • Автор темы
  • Активист
  • *
  • Сообщений: 905
  • Mate, и никаких Unity
    • Просмотр профиля
case $st in
*sql|*full) … ;;
         *)… ;;
esac
Насколько проще…
Соглашусь когда пойму.
Пока что не понятен синтаксис.

1. in это нахождение во множестве, так? тогда не понятно почему не  так (*sql*|*full*)
т.е. почему * только спереди буквосочетания и почему нет открывающей скобки?

2. Вот это вот не понял вообще никак
) … ;;
         *)… ;;

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6752
  • 20% Cooler
    • Просмотр профиля
1. in, закрывающая скобка и ;; - стандартная конструкция case. К выборке отношения не имеет.

Тык

(Нажмите, чтобы показать/скрыть)

2. опять же стандартная конструкция case
вместо троеточия-  набор действий

(Нажмите, чтобы показать/скрыть)
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

 

Страница сгенерирована за 0.027 секунд. Запросов: 25.