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

12

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!

krmarshall87
la source
Qu'est-ce que vous avez besoin de résoudre? Ce var contient un? Non développé $date. Pour cette utilisation: var='file.$DATE.txt'. Pour augmenter la date lorsque var est utilisé? Je suis sûr que vous devez expliquer ce que vous demandez.
Désolé, pour tester si une variable est définie dans la variable "var". Niché en quelque sorte.
krmarshall87
J'ai trouvé un moyen de contourner mon dilemme en supprimant immédiatement tout ce qui semble être une variable (sans m'en soucier au préalable) et en le remplaçant par un caractère générique: sed 's/\${*[a-zA-Z0-9_%]*}*/\*/'
krmarshall87

Réponses:

20

Si vous avez 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

la source
8

Utilisez des guillemets simples autour des variables pour empêcher l'expansion du shell. L'exemple echo '$file'ne se développera pas $file.

Modifier après le commentaire ci-dessous:

Vous pouvez échapper le $signe dans la varvariable avec var="file.\$DATE.txt".

Munir
la source
J'en ai besoin pour me développer, mais seulement d'un niveau. Vous avez oublié d'ajouter un résultat souhaité étape par étape. Mais je voudrais que le contenu du fichier $ soit évalué pour un signe dollar ($ DATE).
krmarshall87
Édité pour résoudre cela.
Munir
Je reçois ces données d'une source extérieure. Même pour remplacer le $ par un \ $, je pense qu'il faudrait un écho. TOUTEFOIS, permettez-moi de voir si, lorsque je l'analyserai, je pourrai le presser.
krmarshall87