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:

  • ¿Cómo usar rsync a través de ssh con direcciones IPv6 LLA (dirección local de enlace) en OSX?
  • Establecer una variable para el resultado de un command de terminal dentro de un AppleScript
  • Ejecute el command de terminal "rsync" de BetterTouchTool
  • ¿Cuál es la variable de entorno __CHECKFIX1436934?
  • Lote replace subcadena con otro en nombres de file
  • Script de Shell para reiniciar un determinado process si no responde
  •  $ 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 🙂

  • ¿Cómo enviar posts de text con telnet en la Terminal?
  • Instalación de shell de peces utilizando homebrew - error de iconv libiconv
  • ¿Cómo puedo informar vulnerabilidades de security para aplicaciones OSX de código abierto?
  • Lista de fonts (activadas) con commands de shell en os x
  • ¿Hay una list de commands únicos para el terminal OS X?
  • Problema al revelar una carpeta oculta
  • 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).