Friday, September 11, 2009

bash-scripting: три способа узнать содержится ли подстрока в строке

Если нужно узнать содержится ли в некой строке (пускай она хранится в переменной) некая подстрока (другая переменная), например, присутствует ли некий путь $DIR в переменной $PATH, то, есть как минимум три способа это сделать.

Способ 1:

echo "$PATH" | /bin/egrep -q "(^|:)$DIR($|:)"
TEST=$?


Или чуть проще:

/bin/egrep -q "(^|:)$DIR($|:)" <<< "$PATH"
TEST=$?


Достоинства: простота, элегантность.
Недостатки: необходимость использования пусть и стандартной, но внешней утилиты.

Способ 2 (наш антисимметричный ответ чемберлену):

[ "$PATH" = "$DIR" -o \
  "${PATH##$DIR:}" != "$PATH" -o \
  "${PATH%%:$DIR}" != "$PATH" -o \
  "${PATH/:$DIR:}" != "$PATH" ]
TEST=$?


Достоинства: "хм...".
Недостатки: "о, это чёэто ваще такое тут!?"
В общем достоинства этого способа противоположны недостаткам первого. С недостатками, как видно, аналогично.

Способ 3 (попытка примирения):

[[ "$PATH" == "$DIR" || "$PATH" == "$DIR":* || "$PATH" == *:"$DIR" || "$PATH" == *:"$DIR":* ]]
TEST=$?

No comments:

Post a Comment