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!


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

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".


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.