Echo ciąg ze zmienną w nim bez rozwijania / oceny [zamknięty]

12

Wszędzie szukałem. Próbowałem echa i wydruku. Wypróbowałem pojedyncze i podwójne cytaty. Ale przeanalizowałem dane i przypisałem je do zmiennej, a następnie chciałbym je ocenić pod kątem obecności zmiennej. Następnie zmienię zmienną na symbol wieloznaczny i szukam pliku.

Przykład:

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

Oto co najmniej jedna z moich wielu awarii:

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

Wiem, że ma to coś wspólnego z rozszerzeniem, ale nie mam pojęcia, jak to rozwiązać. Każda pomoc będzie mile widziana. Dzięki!

krmarshall87
źródło
Co musisz rozwiązać? Ten var zawiera nierozwinięty $date? Dla tego zastosowania: var='file.$DATE.txt'. Aby rozszerzyć datę, kiedy używany jest var? Jestem pewien, że musisz wyjaśnić, o co pytasz.
Przepraszamy, aby sprawdzić, czy zmienna jest zdefiniowana w zmiennej „var”. Rodzaj zagnieżdżony.
krmarshall87
Znalazłem sposób na obejście mojego dylematu, natychmiast usuwając wszystko, co wydaje się zmienne (bez dbania o to, że muszę to zrobić) i zamieniając je na symbol wieloznaczny: sed 's/\${*[a-zA-Z0-9_%]*}*/\*/'
krmarshall87 28.01.16

Odpowiedzi:

20

Jeśli potrzebujesz $datewewnątrz zmiennej var:

var='file.$date.txt'

To zatrzyma $ wewnątrz zmiennej:

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

źródło
8

Użyj pojedynczych cudzysłowów wokół zmiennych, aby zapobiec rozszerzaniu powłoki. Przykład echo '$file'się nie rozwinie $file.

Edytuj po komentarzu poniżej:

Możesz uciec ze $znaku w varzmiennej za pomocą var="file.\$DATE.txt".

Munir
źródło
Potrzebuję go rozwinąć, ale tylko o jeden poziom. Zapomniałem dodać pożądanego wyniku krok po kroku. Chciałbym jednak, aby zawartość pliku $ była oceniana pod kątem znaku dolara ($ DATE).
krmarshall87
Edytowane, aby rozwiązać ten problem.
Munir
Otrzymuję te dane ze źródła zewnętrznego. Myślę, że nawet zamiana $ na \ $ wymagałaby echa. JEDNAK, pozwólcie mi zobaczyć, czy kiedy go analizuję, mogę go wcisnąć.
krmarshall87 28.01.16