Determinare se la prima stringa inizia con la seconda stringa

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 
  1. Rimuovi in modo aggressivo la sottostringa che inizia con w dalla stringa di origine
  2. 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 
  1. Rimuovi w dalla stringa di origine
  2. Confronta con la stringa di origine
  3. Se uguale, la stringa sorgente non inizia con la seconda stringa

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *