2010-11-02 20 views
13

Necesito comprobar si la variable tiene el valor de la cadena que comienza con la subcadena especificada.KSH compruebe si la cadena comienza con la subcadena

En Python sería algo como esto:

foo = 'abcdef' 
if foo.startswith('abc'): 
    print 'Success' 

¿Cuál es la manera más explícita a comprobar en $foo Ksh si STRIG comienza con subcadena bar?

Respuesta

23

Es muy simple, pero parece un poco extraño:

if [[ "$foo" == abc* ]]; then ... 

Uno asumiría que ksh ampliaría el patrón con los archivos en el directorio actual, pero en cambio, lo hace la coincidencia de patrones. Sin embargo, necesitas el [[. Solo [ no funcionará. Las citas no son estrictamente necesarias si no hay espacios en blanco en foo.

+0

Dentro de los corchetes dobles, no necesita las comillas, incluso si '$ foo' es nulo o no está configurado. –

+0

La solución se ve exactamente como lo que estaba buscando. Pero desafortunadamente no funciona en mi ksh. Parece ksh88, supongo que demasiado viejo para tales trucos. – z4y4ts

+0

¿Qué pasa si '$ foo' tiene" = "en él? – user443854

6

También puede emparejar mediante expresiones regulares:

if [[ $foo =~ ^abc ]] 

Para patrones más complejos, le recomiendo usar una variable en lugar de poner el patrón directamente en la prueba:

bar='^begin (abc|def|ghi)[^ ]* end$' 
if [[ $foo =~ $bar ]] 
17

también:

foo='abcdef' 
pattern='abc*' 

case "$foo" in 
    $pattern) echo startswith ;; 
    *) echo otherwise ;; 
esac 
+0

+1 para solución portátil –

+1

Sin duda no necesita la variable interina. 'case $ foo en 'abc' *) echo yes ;; esac' – tripleee

+1

portátil volver a solaris 9/bin/sh y simplificación de @ tripleee obras anteriores – lamont

Cuestiones relacionadas