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
- Elimina agresivamente la subcadena que comienza con
w
de la cadena fuente - 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
- Eliminar
w
de la cadena fuente - Comparar con la cadena fuente
- Si es igual, la cadena de origen no comienza con la segunda cadena