una texto reemplazar recorrer programacion multiplicar manipulacion extraer especiales cortar caracteres cadenas cadena bash shell ubuntu-11.04 string-comparison

texto - recorrer string bash



ComparaciĆ³n de cadenas en bash.[[: extraviado (6)

Estoy tratando de comparar cadenas en bash. Ya encontré una respuesta sobre cómo hacerlo en stackoverflow . En el script que estoy intentando, estoy usando el código enviado por Adam en la pregunta mencionada:

#!/bin/bash string=''My string''; if [[ "$string" == *My* ]] then echo "It''s there!"; fi needle=''y s'' if [[ "$string" == *"$needle"* ]]; then echo "haystack ''$string'' contains needle ''$needle''" fi

También probé el enfoque de ubuntuforums que puedes encontrar en la segunda publicación

if [[ $var =~ regexp ]]; then #do something fi

En ambos casos recibo un error:

[[: not found

¿Qué estoy haciendo mal?


¿Cómo está ejecutando su script? Si lo hiciste con

$ sh myscript

Deberías intentarlo:

$ bash myscript

o, si el script es ejecutable:

$ ./myscript

sh y bash son dos conchas diferentes . Mientras que en el primer caso está pasando su guión como argumento al intérprete de sh, en el segundo caso usted decide en la primera línea qué intérprete será utilizado.


Como @Ansgar mencionó, [[ es un bashismo, es decir, está integrado en Bash y no está disponible para otros proyectiles. Si desea que su script sea portátil, use [ . Las comparaciones también necesitarán una sintaxis diferente: cambiar == a = .


Es la primera línea en tu script:

#!/bin/bash

o

#!/bin/sh

sh shell produce estos mensajes de error, no bash


Especifique bash en lugar de sh cuando ejecute el script. Personalmente noté que son diferentes en Ubuntu 12.10:

bash script.sh arg0 ... argn


Tuve este problema al instalar Heroku Toolbelt

Así es como resolví el problema

$ ls -l /bin/sh lrwxrwxrwx 1 root root 4 ago 15 2012 /bin/sh -> dash

Como puede ver, / bin / sh es un enlace a "dash" (no bash), y [[ es sugarness sintáctico bash. Así que acabo de reemplazar el enlace a / bin / bash. ¡Tenga cuidado al usar rm como este en su sistema!

$ sudo rm /bin/sh $ sudo ln -s /bin/bash /bin/sh


[[ es un bash-builtin. Tu /bin/bash no parece ser un bash real.