web-dev-qa-db-fra.com

Faire écho à une chaîne contenant une variable sans la développer / l'évaluer

J'ai cherché partout. Écho et impression essayés. J'ai essayé des guillemets simples et doubles. Mais j'ai analysé des données et les ai attribuées à une variable et je voudrais ensuite l'évaluer s'il y a une variable en elle. Je vais ensuite remplacer la variable par un caractère générique et rechercher le fichier.

Exemple:

var="file.$DATE.txt"

### Where it goes wrong-  Needs to identify that $DATE is within the $var varaible.
test=$(echo "$var"|grep '\$')
if [[ $test ]]
then
    ### I would use whatever fix is discovered here as well
    test=$(echo $test|sed 's/\$[a-zA-Z]*/\*/')
fi

### (Actually pulling from remote machine to local)
cat $test > /tmp/temporary.file

Voici au moins un de mes nombreux échecs:

Prompt> file=blah.$DATE
Prompt> test=$(echo "$file"|grep '\$')
Prompt> echo $test
Prompt>
Prompt>

Je sais que cela a quelque chose à voir avec l'expansion, mais je ne sais pas comment le régler. Toute aide serait appréciée. Merci!

11
krmarshall87

Si tu as besoin $date à l'intérieur de la variable var:

var='file.$date.txt'

Cela gardera le $ à l'intérieur de la variable:

$ echo "$var" | grep '\$'
file.$date.txt
19
user79743

Utilisez des guillemets simples autour des variables pour empêcher l'expansion de Shell. Exemple echo '$file' ne se développera pas $file.

Modifier après le commentaire ci-dessous:

Vous pouvez échapper au $ signez la variable var avec var="file.\$DATE.txt".

8
Munir