GNU/Linux >> Linux Esercitazione >  >> Linux

definire una macro simile a una funzione in bash

La sintassi arbitraria non può essere fatta per fare nulla. Le parentesi sono metacaratteri che hanno un significato speciale per il parser, quindi non c'è modo di usarli come nomi validi . Il modo migliore per estendere la shell è definire le funzioni.

Questo sarebbe un echo di base wrapper che scrive sempre nello stesso file:

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

Questo fa più o meno lo stesso, ma in aggiunta gestisce stdin - sacrificando echo's -e e -n opzioni:

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

Che può essere chiamato come

f arg1 arg2...

o

f <file

Alle funzioni vengono passati argomenti allo stesso modo di qualsiasi altro comando.

Il secondo wrapper echo-like verifica prima un argomento set first o stdin proveniente da un non-tty e chiama in modo condizionale printf utilizzando i parametri posizionali if set o stdin. L'espressione test evita il caso sia di zero argomenti che di nessun reindirizzamento da un file, nel qual caso Bash proverebbe ad espandere l'output del terminale, bloccando la shell.


Sì, solo tu dovresti chiamarlo con F sth :

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

Leggi di più qui.


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

Non usi le parentesi quando lo chiami. Ecco come lo chiami:

F "text to save"

Linux
  1. Script Bash(I)

  2. Come definire il delimitatore "scheda" con "taglio" in Bash?

  3. Ordinamento in bash

  4. comando di esportazione bash

  5. (ricerca al contrario) in Bash

Dichiarazione del caso Bash

Bash if..else Statement

Matrici Bash

Bash Shebang

Comando Bash printf

Matrice associativa in Bash