Quiero ver si una cadena está dentro de una porción de otra cadena.
p.ej:
'ab' in 'abc' -> true
'ab' in 'bcd' -> false
¿Cómo puedo hacer esto en un condicional de un script bash?
command-line
bash
scripts
Lucio
fuente
fuente
echo
declaraciones. Porque consigoab is not in abc
ab was found in abc
, pero si lo usosubstring=z
me salez was found in abc
ab is not in abc
. Peroz was found in abc
. Esto es divertido: D[[ "bcd" =~ "ab" ]]
[[ "abc" =~ "ab" ]]
los corchetes son para la prueba, y como se trata de corchetes dobles, puede hacer algunas pruebas adicionales
=~
.Entonces podrías usar este formulario algo así como
Editar: corregido "= ~", había cambiado.
fuente
fail
con estos parámetros:var2="abcd"
[[ $string =~ $substring ]]
. Actualicé la respuesta.Usar patrones de nombre de archivo bash (también conocidos como patrones "glob")
fuente
Los siguientes dos enfoques funcionarán en cualquier entorno compatible con POSIX, no solo en bash:
Ambos de los resultados anteriores:
El primero tiene la ventaja de no generar un
grep
proceso separado .Tenga en cuenta que lo uso en
printf %s\\n "${foo}"
lugar deecho "${foo}"
porqueecho
podría estropearse${foo}
si contiene barras invertidas.fuente
xrandr
nombres de monitor almacenados en la variable. +1 y bienvenidos al 1K rep club :)declaración de caso de shell
Esta es la solución más portátil, funcionará incluso en los viejos shells Bourne y Korn
Ejecución de muestra:
Tenga en cuenta que no tiene que usar específicamente
echo
, puede usarloexit 1
yexit 0
significar éxito o fracaso.Lo que podríamos hacer también es crear una función (que puede usarse en scripts grandes si es necesario) con valores de retorno específicos (0 en coincidencia, 1 en ausencia de coincidencia):
grep
Este enfoque particular es útil con las declaraciones if-else en
bash
. También en su mayoría portátilAWK
Pitón
Rubí
fuente
Cuidado con
[[
y"
:Como dijo @glenn_jackman, pero tenga en cuenta que si ajusta todo el segundo término entre comillas dobles, cambiará la prueba a coincidencia literal .
Fuente: http://tldp.org/LDP/abs/html/comparison-ops.html
fuente
Similar a la respuesta de edwin, pero con portabilidad mejorada para posix y ksh, y un toque menos ruidoso que el de Richard:
Salida:
fuente