Gema string dengan variabel di dalamnya tanpa memperluas / mengevaluasinya [ditutup]

12

Saya sudah mencari kemana-mana. Mencoba gema dan mencetak. Mencoba kutipan tunggal dan ganda. Tapi saya telah mem-parsing data dan menugaskannya ke variabel dan ingin kemudian mengevaluasinya jika ada variabel di dalamnya. Saya kemudian akan mengganti variabel dengan wildcard dan mencari file.

Contoh:

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

Inilah setidaknya satu dari banyak kegagalan saya:

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

Saya tahu itu ada hubungannya dengan ekspansi, tetapi tidak tahu bagaimana cara mengatasinya. Bantuan apa pun akan dihargai. Terima kasih!

krmarshall87
sumber
Apa yang perlu Anda selesaikan? Var itu berisi yang tidak diperluas $date? Untuk penggunaan bahwa: var='file.$DATE.txt'. Untuk memperluas tanggal kapan var digunakan? Saya yakin Anda perlu menjelaskan apa yang Anda minta.
Maaf, untuk menguji apakah suatu variabel didefinisikan dalam variabel "var". Bersarang semacam.
krmarshall87
Saya menemukan cara untuk mengatasi dilema saya dengan segera menghapus apa pun yang tampaknya merupakan variabel (tanpa peduli terlebih dahulu yang saya perlukan) dan menukarnya dengan wildcard: sed 's/\${*[a-zA-Z0-9_%]*}*/\*/'
krmarshall87

Jawaban:

20

Jika Anda perlu $datedi dalam variabel var:

var='file.$date.txt'

Itu akan membuat $ di dalam variabel:

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

sumber
8

Gunakan tanda kutip tunggal di sekitar variabel untuk mencegah ekspansi shell. Contoh echo '$file'tidak akan berkembang $file.

Edit setelah komentar di bawah ini:

Anda dapat menghindari $tanda masuk ke varvariabel var="file.\$DATE.txt".

Munir
sumber
Saya membutuhkannya untuk berkembang, tetapi hanya satu tingkat. Lupa menambahkan langkah-demi-langkah hasil yang diinginkan. Tapi saya ingin isi $ file dievaluasi untuk tanda dolar ($ DATE).
krmarshall87
Diedit untuk menyelesaikannya.
Munir
Saya menerima data itu dari sumber luar. Bahkan untuk mengganti $ dengan \ $, saya pikir, akan membutuhkan gema. NAMUN, biarkan saya melihat apakah ketika saya menguraikannya saya bisa
memerasnya