Я хочу видеть, находится ли строка внутри части другой строки.
например:
'ab' in 'abc' -> true
'ab' in 'bcd' -> false
Как я могу сделать это в условном сценарии bash?
command-line
bash
scripts
Lucio
источник
источник
echo
заявлений. Потому что я получаюab is not in abc
ab was found in abc
, но если я использую,substring=z
я получаюz was found in abc
ab is not in abc
. Ноz was found in abc
. Это смешно: D[[ "bcd" =~ "ab" ]]
[[ "abc" =~ "ab" ]]
квадратные скобки предназначены для теста, и поскольку это двойные квадратные скобки, могут быть использованы некоторые дополнительные тесты
=~
.Таким образом, вы можете использовать эту форму что-то вроде
Редактировать: исправлено "= ~", перевернуто.
источник
fail
с такими параметрами:var2="abcd"
[[ $string =~ $substring ]]
. Я обновил ответ.Использование шаблонов имен файлов bash (также называемых шаблонами "glob")
источник
Следующие два подхода будут работать в любой POSIX-совместимой среде, а не только в bash:
Оба вышеприведенных вывода:
Преимущество первого состоит в том, что он не порождает отдельный
grep
процесс.Обратите внимание, что я использую
printf %s\\n "${foo}"
вместоecho "${foo}"
потому чтоecho
может искажать,${foo}
если он содержит обратную косую черту.источник
xrandr
имен мониторов, хранящихся в переменной. +1 и добро пожаловать в 1K Rep Club :)оператор оболочки
Это самое портативное решение, будет работать даже на старых оболочках Bourne и Korn.
Образец прогона:
Обратите внимание, что вам не нужно специально использовать,
echo
вы можете использоватьexit 1
иexit 0
для обозначения успеха или неудачи.То, что мы могли бы также сделать, это создать функцию (которая может использоваться в больших сценариях при необходимости) с конкретными возвращаемыми значениями (0 при совпадении, 1 при отсутствии совпадения):
Grep
Этот конкретный подход полезен для операторов if-else в
bash
. Также в основном портативныйAWK
питон
Рубин
источник
Имейте в виду
[[
и"
:Поэтому, как сказал @glenn_jackman, учтите, что если вы заключите весь второй член в двойные кавычки, он переключит тест на буквальное соответствие.
Источник: http://tldp.org/LDP/abs/html/comparison-ops.html
источник
Аналогичен ответу Эдвина, но с улучшенной переносимостью для posix & ksh и менее шумным, чем у Ричарда:
Выход:
источник