Impossible de faire référence à un paramètre dans Bash

Je veux mettre TextA au début de TextB en

cat TextA A TextB 

Le problème est que je ne sais pas comment faire référence aux premier et second parameters, à savoir TextA et TextB dans le script suivant appelé A:

  #!/bin/bash cat TextA > m1 cat TextB > m2 cat m1 m2 > TextB 

où m1 et m2 sont des fichiers temporaires.

Comment pouvez-vous vous référer aux deux fichiers du script shell?

Vous pouvez utiliser $0 , $1 , $2 etc. pour faire référence aux variables du script.

$0 est le nom du script lui-même
$1 est le premier paramètre
$2 est le deuxième paramètre
etc

Par exemple, si vous avez cette commande:

 a A1 A2 

Alors à l’intérieur de vous aurez:

 $0 = a $1 = A1 $2 = A2 

Dans un script bash, le premier paramètre est $ 1, le second est $ 2 et ainsi de suite.

Si vous souhaitez une valeur par défaut, par exemple le troisième paramètre, vous pouvez utiliser:

 var=${3:-"default"} 

vous pouvez simplement utiliser append (>>)

 cat TextB >> TextA 

Le résultat est que TextA précède le texte TextB dans TextA

Je ferais ce qui suit:

 #!/bin/bash if [ $# -ne 2 ] then echo "Prepend file with copyright notice" echo "Usage: `basename $0`  " exit 1 fi copyright=$1 mainfile=$2 cat $mainfile > /tmp/m.$$ cat $copyright /tmp/m.$$ > $mainfile #cleanup temporary files rm /tmp/m.$$ /tmp/m2.$$ 

Je suis surpris que personne ne suggère le résultat suivant

 cat TextA TextB | tee > TextB 

De cette façon, vous pouvez éviter de créer un fichier temporaire.

On dirait que vous pouvez juste faire ce qui suit:

 TextA="text a" TextB="text b" echo "$TextA $TextB" > file1 

Ou utilisez l’opérateur append (>>).