2017-10-17 5 views
1

Supposons deux fichiers: file1 et file2. file1 est un court script Bash, qui référence file2 afin d'obtenir une chaîne de texte. La chaîne de texte inclut un nom de variable ($VAR1), mais la variable elle-même est affectée d'une valeur dans file1.Référencement du nom de variable bash depuis un fichier séparé

$ cat file1 
#!/bin/bash 
VAR1="World" 
CMDS=$(cat file2) 
echo "$CMDS" 

$ cat file2 
Hello $VAR1 ! 

Dans la configuration ci-dessus, le nom de la variable n'est pas reconnu correctement lors de l'exécution de file1.

$ bash file1 
Hello $VAR1 ! 

Que dois-je faire pour que le nom de la variable est correctement reconnu lors de l'exécution de file1?

+2

Pourquoi voulez-vous faire cela? – 123

+0

@ 123 Apparemment, il veut utiliser 'bash' comme système de template. – chepner

+0

@chepner Une façon très étrange d'aborder les modèles. – 123

Répondre

0

Comme vous n'exécutez pas file2, juste cat son contenu, la variable dans file2 ne sert que d'espace réservé. Vous pouvez diriger la sortie de cat vers sed, comme suit:

CMDS=$(cat file2|sed -e "s/\$VAR1/$VAR1/") 
+0

'sed' sait lire' file2'. Le ['cat' est inutile] (http://www.iki.fi/era/unix/award.html). – tripleee