Eco una stringa con una variabile al suo interno senza espanderla / valutarla [chiuso]


12

Ho cercato dappertutto. Ho provato l'eco e la stampa. Ho provato virgolette singole e doppie. Ma ho analizzato i dati e li ho assegnati a una variabile e vorrei quindi valutarli se c'è una variabile al suo interno. Sostituirò quindi la variabile con un carattere jolly e cercherò il file.

Esempio:

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

Ecco almeno uno dei miei molti fallimenti:

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

So che ha qualcosa a che fare con l'espansione, ma non ho idea di come risolverlo. Qualsiasi aiuto sarebbe apprezzato. Grazie!


Cosa devi risolvere? Quella var contiene un non espanso $date? Per tale uso: var='file.$DATE.txt'. Per espandere la data quando si utilizza var? Sono sicuro che devi spiegare cosa stai chiedendo.

Spiacenti, per verificare se una variabile è definita all'interno della variabile "var". Nidificato di sorta.
Krmarshall87,

Ho trovato un modo per aggirare il mio dilemma rimuovendo immediatamente tutto ciò che sembra essere una variabile (senza preoccuparmene prima di ciò che devo fare) e scambiandolo con un carattere jolly: sed 's/\${*[a-zA-Z0-9_%]*}*/\*/'
krmarshall87,

Risposte:


20

Se hai bisogno $dateall'interno della variabile var:

var='file.$date.txt'

Ciò manterrà $ all'interno della variabile:

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

8

Utilizzare virgolette singole attorno alle variabili per impedire l'espansione della shell. L'esempio echo '$file'non si espanderà $file.

Modifica dopo il commento qui sotto:

Puoi sfuggire al $segno nella varvariabile con var="file.\$DATE.txt".


Ne ho bisogno per espandersi, ma solo un livello. Hai dimenticato di aggiungere un risultato desiderato passo dopo passo. Ma vorrei che il contenuto di $ file venisse valutato per un segno di dollaro ($ DATE).
Krmarshall87,

A cura di risolverlo.
Munir,

Ricevo quei dati da una fonte esterna. Anche per sostituire $ con un \ $, credo, richiederebbe un eco. TUTTAVIA, fammi vedere se quando lo sto analizzando riesco a
spremerlo
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.