JavaScript ha una funzione per questo:
"world".startsWith("w") true
Come posso testarlo con la shell? Ho questo codice:
if [ world = w ] then echo true else echo false fi
ma non riesce perché sta testando luguaglianza. Preferirei usare un builtin, ma qualsiasi utilità da questa pagina sarebbe accettabile:
http://pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.html
Risposta
Se la tua shell è bash: tra doppie parentesi, il lato destro delloperatore == è uno schema a meno che non sia citato completamente:
if [[ world == w* ]]; then echo true else echo false fi
O più conciso: [[ world == w* ]] && echo true || echo false
[*]
Se non stai mirando specificamente a bash: usa listruzione case per la corrispondenza dei modelli
case "world" in w*) echo true ;; *) echo false ;; esac
[*] ma devi stare attento con A && B || C
perché C
verrà eseguito se A non riesce o B non riesce. Il modulo if A; then B; else C; fi
eseguirà solo C se A fallisce.
Risposta
set world
Quindi:
if [ "${1%%w*}" ] then echo false else echo true fi
- Rimuovi in modo aggressivo la sottostringa che inizia con
w
dalla stringa di origine - Se rimane qualcosa, la stringa di origine non inizia con la seconda stringa
Oppure:
if [ "$1" = "${1#w}" ] then echo false else echo true fi
- Rimuovi
w
dalla stringa di origine - Confronta con la stringa di origine
- Se uguale, la stringa sorgente non inizia con la seconda stringa