Chcę sprawdzić, czy ciąg znaków znajduje się w części innego ciągu.
na przykład:
'ab' in 'abc' -> true
'ab' in 'bcd' -> false
Jak mogę to zrobić w warunkowym skrypcie bash?
command-line
bash
scripts
Lucio
źródło
źródło
echo
instrukcji. Ponieważ dostajęab is not in abc
ab was found in abc
, ale jeśli użyjęsubstring=z
, dostajęz was found in abc
ab is not in abc
. Alez was found in abc
… To zabawne: D[[ "bcd" =~ "ab" ]]
[[ "abc" =~ "ab" ]]
nawiasy klamrowe są do testu, a ponieważ są to podwójne nawiasy klamrowe, może to oznaczać dodatkowe testy
=~
.Więc możesz użyć tego formularza
Edycja: poprawione „= ~”, odwróciło się.
źródło
fail
z tymi parametrami:var2="abcd"
[[ $string =~ $substring ]]
. Zaktualizowałem odpowiedź.Używanie wzorców nazw plików bash (zwanych również wzorcami „glob”)
źródło
Poniższe dwa podejścia będą działać w dowolnym środowisku zgodnym z POSIX, nie tylko w bash:
Oba powyższe dane wyjściowe:
Ta pierwsza ma tę zaletę, że nie spawnuje osobnego
grep
procesu.Zauważ, że używam
printf %s\\n "${foo}"
zamiast,echo "${foo}"
ponieważecho
może się mangować,${foo}
jeśli zawiera odwrotne ukośniki.źródło
xrandr
nazw monitorów przechowywanych w zmiennej. +1 i witamy w klubie 1K rep :)instrukcja case shell
To najbardziej przenośne rozwiązanie, działa nawet na starych pociskach Bourne'a i Korn
Przykładowy przebieg:
Pamiętaj, że nie musisz specjalnie używać
echo
, możesz używaćexit 1
iexit 0
oznaczać sukces lub porażkę.Możemy również stworzyć funkcję (w razie potrzeby w dużych skryptach) z określonymi wartościami zwracanymi (0 w przypadku dopasowania, 1 w przypadku braku dopasowania):
grep
To szczególne podejście jest przydatne w przypadku instrukcji if-else w
bash
. Również w większości przenośneAWK
Pyton
Rubin
źródło
Przeszkadza
[[
i"
:Tak jak powiedział @glenn_jackman, ale pamiętaj, że jeśli owiniesz cały drugi termin podwójnymi cudzysłowami, przełączy on test na dosłowne dopasowanie.
Źródło: http://tldp.org/LDP/abs/html/comparison-ops.html
źródło
Podobne do odpowiedzi edwina, ale z ulepszoną przenośnością dla posix & ksh i odrobiną mniej hałasu niż Richard:
Wynik:
źródło