Determinar si la primera cadena comienza con la segunda cadena

JavaScript tiene una función para esto:

"world".startsWith("w") true 

¿Cómo puedo probar esto con shell? Tengo este código:

if [ world = w ] then echo true else echo false fi 

pero falla porque está probando la igualdad. Preferiría usar una función incorporada, pero cualquier utilidad de esta página sería aceptable:

http://pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.html

Respuesta

Si su shell es bash: entre corchetes dobles, el lado derecho del operador == es un patrón a menos que esté completamente entre comillas:

if [[ world == w* ]]; then echo true else echo false fi 

O más brevemente: [[ world == w* ]] && echo true || echo false [*]

Si no está apuntando a bash específicamente: use la declaración case para la coincidencia de patrones

case "world" in w*) echo true ;; *) echo false ;; esac 

[*] pero debe tener cuidado con A && B || C porque C se ejecutará si A falla o B falla. El formulario if A; then B; else C; fi solo ejecutará C si A falla.

Respuesta

set world 

Luego:

if [ "${1%%w*}" ] then echo false else echo true fi 
  1. Elimina agresivamente la subcadena que comienza con w de la cadena fuente
  2. Si queda algo, entonces la cadena fuente no comienza con la segunda cadena

O:

if [ "$1" = "${1#w}" ] then echo false else echo true fi 
  1. Eliminar w de la cadena fuente
  2. Comparar con la cadena fuente
  3. Si es igual, la cadena de origen no comienza con la segunda cadena

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *