Почну з того, що я думаю, що ця проблема трохи менш невинна, ніж звучить.
Що мені потрібно зробити: перевірити наявність папки в межах змінної середовища PATH. Це може бути на початку або десь після. Мені просто потрібно переконатися, що ця папка там є.
Приклад моєї проблеми - давайте скористаємося /opt/gnome
.
SCENARIO 1: папка не знаходиться на початку PATH
# echo "$PATH"
/sbin:/usr/sbin:/opt/gnome:/var/opt/gnome
# echo "$PATH" | grep ":/opt/gnome"
/sbin:/usr/sbin:/opt/gnome:/var/opt/gnome
Зауважте, що греп повинен бути достатньо конкретним, щоб він не потрапляв /var/opt/gnome
. Звідси і товста кишка.
SCENARIO 2: папка знаходиться на початку PATH.
# echo "$PATH"
/opt/gnome:/sbin:/usr/sbin:/var/opt/gnome
# echo "$PATH" | grep "^/opt/gnome"
/opt/gnome:/sbin:/usr/sbin:/var/opt/gnome
Це моя проблема - мені потрібно шукати або двокрапку, або початковий рядок із цією папкою. Що я хотів би зробити, це один з цих двох дужок виразів:
# echo $PATH | grep "[^:]/opt/gnome"
# echo $PATH | grep "[:^]/opt/gnome"
АЛЕ [^
і [:
мають свої значення. Тому дві вищевказані команди не працюють.
Чи є спосіб, коли я можу схватитися за ці два сценарії в одній команді?
grep '^\(any number of other matches:*:\)*my match\(:.*\)*$'
/opt/gnome:
або/opt/gnome$
, ви знайдете/opt/gnome-foo
або/opt/gnome/bar
.