Ecoar uma string com uma variável nela sem expandi-la / avaliá-la [fechado]

12

Eu procurei em todos os lugares. Tentei ecoar e imprimir. Tentei aspas simples e duplas. Mas eu analisei os dados e os atribuí a uma variável e gostaria de avaliá-los se houver uma variável dentro dela. Em seguida, substituirei a variável por um curinga e procurarei o arquivo.

Exemplo:

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

Aqui está pelo menos uma das minhas muitas falhas:

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

Eu sei que isso tem algo a ver com expansão, mas não tenho idéia de como resolver isso. Qualquer ajuda seria apreciada. Obrigado!

krmarshall87
fonte
O que você precisa resolver? Essa var contém um não expandido $date? Para essa utilização: var='file.$DATE.txt'. Para expandir a data em que var é usado? Estou certo de que você precisa explicar o que está perguntando.
Desculpe, para testar se uma variável está definida na variável "var". Aninhado das sortes.
precisa saber é o seguinte
Eu encontrei uma maneira de contornar o meu dilema, imediatamente removendo tudo o que parece ser uma variável (sem se importar pela primeira vez que eu preciso) e trocando-o com um curinga: sed 's/\${*[a-zA-Z0-9_%]*}*/\*/'
krmarshall87

Respostas:

20

Se você precisa $datedentro da variável var:

var='file.$date.txt'

Isso manterá o $ dentro da variável:

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

fonte
8

Use aspas simples em torno de variáveis ​​para impedir a expansão do shell. O exemplo echo '$file'não será expandido $file.

Edite após o comentário abaixo:

Você pode escapar do $sinal da varvariável com var="file.\$DATE.txt".

Munir
fonte
Eu preciso expandir, mas apenas um nível. Esqueceu-se de adicionar um resultado desejado passo a passo. Mas gostaria que o conteúdo do arquivo $ fosse avaliado quanto a um sinal de cifrão ($ DATE).
precisa saber é o seguinte
Editado para resolver isso.
Munir
Eu recebo esses dados de uma fonte externa. Mesmo para substituir o $ por a \ $, eu acho, exigiria um eco. No entanto, deixe-me ver se quando estou a analisá-lo eu posso espremer-lo.
krmarshall87