La syntaxe arbitraire ne peut pas être faite pour faire quoi que ce soit. Les parenthèses sont des métacaractères qui ont une signification particulière pour l'analyseur, vous ne pouvez donc pas les utiliser comme noms valides . La meilleure façon d'étendre le shell est de définir des fonctions.
Ce serait un echo
de base wrapper qui écrit toujours dans le même fichier :
f() {
echo "[email protected]"
} >a.txt
Cela fait à peu près la même chose mais gère en plus stdin - en sacrifiant echo's
-e
et -n
option :
f() {
[[ ${1+_} || ! -t 0 ]] && printf '%s\n' "${*-$(</dev/fd/0)}"
} >a.txt
Qui peut être appelé comme
f arg1 arg2...
ou
f <file
Les fonctions reçoivent des arguments de la même manière que n'importe quelle autre commande.
Le deuxième wrapper de type écho teste d'abord soit un premier argument défini, soit stdin provenant d'un non-tty, et appelle conditionnellement printf en utilisant soit les paramètres positionnels s'ils sont définis, soit stdin. L'expression de test évite le cas des deux arguments zéro et aucune redirection à partir d'un fichier, auquel cas Bash essaierait d'étendre la sortie du terminal, en suspendant le shell.
Oui, seulement vous devriez l'appeler avec F sth
:
F()
{
echo "$1" > a.txt
}
En savoir plus ici.
F () {
echo "$1" > a.txt
}
Vous n'utilisez pas de parenthèses lorsque vous l'appelez. Voici comment vous l'appelez :
F "text to save"