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"