GNU/Linux >> Tutoriels Linux >  >> Linux

définir une macro de type fonction dans bash

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"

Linux
  1. Script bash (I)

  2. Comment définir le délimiteur 'tab' avec 'cut' dans Bash?

  3. Comparaison de dates dans Bash

  4. Exécutez la commande bash sur le pipeline jenkins

  5. (reverse-i-search) dans Bash

Déclaration de cas bash

Instruction Bash if..else

Tableaux bash

Bash Shebang

Commande Bash printf

Tableau associatif dans Bash