¿Qué debo saber cuando defino una función bash para usar el nombre de un programa?

¿Qué debo saber cuando defino una función bash para usar el nombre de un programa?

En muchos casos necesito crear funciones con el mismo nombre que otros programas y no tengo idea de si es una buena forma de utilizar scripts bash.

Ejemplo:

    function echo () {
        echo -n "$@" ;
    }  

Después de la prueba, parece que verifica los nombres de las funciones dentro del script antes de las rutas del contenedor. Quiero asegurarme de eso y de cualquier otra información que deba saber.

Respuesta1

echo() {
  command echo -n "$@"
}

Usar commandaquí significa solicitar el echocomando (que está integrado aquí) en lugar de la función que de otro modo tendría prioridad.

Y dado que aquí, echotambién resulta ser una función integrada (no se busca por $PATHcierto, ya que las funciones integradas tienen prioridad sobre los comandos del sistema de archivos), también puedes hacer:

echo() {
  builtin echo -n "$@"
}

Este último enfoque es preferible en zsh, donde command echose ejecutaría /bin/echoen su lugar (excepto en shemulación).

Existen algunas variaciones sutiles entre los shells, pero el orden de precedencia es generalmente:

  1. elementos incorporados especiales
  2. funciones
  3. incorporados
  4. comandos en $PATH(y el orden depende del orden en $PATHy en la hashtabla según lo gestiona el hashintegrado)

Teniendo en cuenta que los alias y palabras clave en la sintaxis del shell ( for, if...), cuando no están entrecomillados, se consideran antes que aquellos.

El orden de 1y 2se invierte en algunos shells como basho zsh. bashno permite que se definan funciones con el mismo nombre que una función incorporada especial cuando se invoca como sh.

información relacionada