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.