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!


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

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".


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.