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

echodeclaraciones. Porque consigoab is not in abcab was found in abc, pero si lo usosubstring=zme salez was found in abcab 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
failcon 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
grepproceso separado .Tenga en cuenta que lo uso en
printf %s\\n "${foo}"lugar deecho "${foo}"porqueechopodría estropearse${foo}si contiene barras invertidas.fuente
xrandrnombres 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 1yexit 0significar é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