egrep: expresión (sub) vacía: comportamiento inesperado para Bash Loop en Mac

Tengo el script simplificado de relleno en Mac OS X 10.12:

#!/usr/bin/env bash echo "=> BASH_VERSION = $BASH_VERSION" function testForLoopMac { local file for file do echo File=$file done | egrep "$file" } function testForLoopMacBis { local file for file do echo File=$file done | egrep "$file|OK" } testForLoopMac $@ testForLoopMacBis $@ 

Pero el resultado cuando corro es:

  • Cuando se lanza `screen`, el entorno" normal "de bash no está configurado
  • Lote replace subcadena con otro en nombres de file
  • Ejecutar un file .sh pero después de una nueva RUTA no es visible en el shell
  • "Es un error de directory" en bash
  • ¿Para qué sirve la variable de entorno Apple_PubSub_Socket_Render?
  • Bash subshell en Terminal tiene habilitado el guardado de sesiones de Mac OS
  •  $ testForLoopMac.sh example.pdf => BASH_VERSION = 3.2.57(1)-release File=example.pdf egrep: empty (sub)expression 

    En Debian / Ubuntu Linux, el resultado es:

     $ testForLoopMac.sh example.md => BASH_VERSION = 4.3.30(1)-release File=example.md File=example.md 

    Editar: con bash4 en Mac OSX 10.12:

    Cambié el shebang a #!/usr/bin/env bash4 y el resultado es el mismo:

     $ testForLoopMac.sh example.md => BASH_VERSION = 4.4.12(1)-release File=example.md egrep: empty (sub)expression 

    Editar: Gracias a ustedes, entiendo que la diferencia de comportamiento en Linux o BSD egrep se debe a que en el momento de la ejecución de egrep la variable puede estar vacía.

    Voy a usar, por lo tanto, el siguiente regExp:

    egrep "File=|OK"

    Gracias de nuevo 🙂

  • ZSH - icons de git que faltan
  • accediendo a Keychain Access desde la terminal - OSX
  • Cambiar el color del terminal para cada pestaña
  • acceso directo para abrir múltiples progtwigs y hacer que abran un file específico
  • ¿Cómo lidiar con un espacio al establecer $ PATH?
  • ¿Hay una mejor manera de apagar / reiniciar OSX?
  • One Solution collect form web for “egrep: expresión (sub) vacía: comportamiento inesperado para Bash Loop en Mac”

    El shell expande el $file subexpression $file en el lado derecho de la tubería antes de que la variable tenga algún valor. Entonces, en ambas funciones, egrep se llama realmente con la cadena vacía en lugar de $file . La primera function no arroja un error porque un patrón vacío es un parámetro válido para egrep tanto en macOS como en Linux. En la segunda frase, la diferencia entra en juego porque la subexpresión vacía hace que BSD egrep (la utilizada en macOS) arroje un error.

    Ejemplo:

     echo foo | egrep "|foo" egrep: empty (sub)expression 

    como otro ejemplo con $file sin valor

     echo foo | egrep "$file|foo" egrep: empty (sub)expression 

    Entonces, como una solución alternativa en su function, use:

     egrep -e "$file" -e 'OK' 

    No tengo idea de por qué está usando egrep cuando busca cadenas fijas.

    Loving Apple Products like poisoning (iPhone, iPad, iMac, Macbook, iWatch).