GNU/Linux >> Znalost Linux >  >> Linux

definujte v bash makro podobné funkci

Libovolnou syntaxi nelze přimět k ničemu. Závorky jsou metaznaky které mají pro analyzátor zvláštní význam, takže je nelze použít jako platná názvy . Nejlepší způsob, jak rozšířit shell, je definovat funkce.

Toto by byl základní echo wrapper, který vždy zapisuje do stejného souboru:

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

To dělá přibližně totéž, ale navíc zpracovává stdin - obětuje echo's -e a -n možnosti:

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

Což lze nazvat jako

f arg1 arg2...

nebo

f <file

Funkce jsou předávány argumenty stejným způsobem jako jakékoli jiné příkazy.

Druhý echo-like wrapper nejprve testuje buď set první argument, nebo stdin pocházející z non-tty, a podmíněně volá printf pomocí buď pozičních parametrů, pokud jsou nastaveny, nebo stdin. Testovací výraz se vyhýbá případu nulových argumentů a žádného přesměrování ze souboru, v takovém případě by se Bash pokusil rozšířit výstup terminálu a zavěsil shell.


Ano, pouze vy byste to měli volat pomocí F sth :

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

Přečtěte si více zde.


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

Při volání nepoužíváte závorky. Říkáte tomu:

F "text to save"

Linux
  1. Jak definovat oddělovač „tab“ pomocí „cut“ v Bash?

  2. Spusťte příkaz bash na jenkins pipeline

  3. (reverse-i-search) v Bash

  1. Bash skriptování (I)

  2. Řazení v bash

  3. příkaz pro export bash

  1. Proměnná exportu Bash

  2. Porovnání dat v Bash

  3. Definujte funkci v příkazovém řádku unix/linux (např. BASH)