GNU/Linux >> Tutoriales Linux >  >> Linux

definir una macro similar a una función en bash

No se puede hacer que la sintaxis arbitraria haga nada. Los paréntesis son metacaracteres que tienen un significado especial para el analizador, por lo que no hay forma de que pueda usarlos como nombres válidos . La mejor manera de extender el shell es definir funciones.

Este sería un echo básico contenedor que siempre escribe en el mismo archivo:

f() {
    echo "[email protected]"
} >a.txt

Esto hace más o menos lo mismo pero además maneja stdin - sacrificando echo's -e y -n opciones:

f() {
    [[ ${1+_} || ! -t 0 ]] && printf '%s\n' "${*-$(</dev/fd/0)}"
} >a.txt

Que se puede llamar como

f arg1 arg2...

o

f <file

A las funciones se les pasan argumentos de la misma manera que a cualquier otro comando.

El segundo envoltorio similar a un eco primero prueba si hay un primer argumento establecido o stdin proveniente de un no tty, y condicionalmente llama a printf usando los parámetros posicionales si está establecido o stdin. La expresión de prueba evita el caso de cero argumentos y la redirección desde un archivo, en cuyo caso Bash intentaría expandir la salida de la terminal, bloqueando el shell.


Sí, solo debes llamarlo con F sth :

F()
{
  echo "$1" > a.txt
}

Lea más aquí.


F () {
  echo "$1" > a.txt
}

No usas paréntesis cuando lo llamas. Así es como lo llamas:

F "text to save"

Linux
  1. Bash secuencias de comandos (I)

  2. ¿Cómo definir el delimitador de 'tabulación' con 'cortar' en Bash?

  3. Comparación de fechas en Bash

  4. Defina la función en la línea de comandos de Unix/Linux (por ejemplo, BASH)

  5. (búsqueda inversa) en Bash

Declaración de caso Bash

Declaración de Bash if..else

Arreglos bash

Bash Shebang

Comando Bash printf

Matriz asociativa en Bash