Interpolasi tanda dolar di dalam tanda kutip di bash

9

Saya menjalankan skrip tes kecil ini yang saya tulis:

#!/bin/bash

TESTCASE=$@
testHarness <<runTest
$TESTCASE
runTest

dari baris perintah:

./test.sh "1092$212"

tapi tanda dolar sedang dihapus. Jika saya menghindarinya, itu berhasil. Tetapi saya pikir tanda kutip ganda akan melindungi saya dari keharusan melakukan ini. Dapatkah seseorang tolong bantu saya memahami apa yang terjadi dan bagaimana cara memperbaikinya?

Amir Afghani
sumber
Masalahnya adalah ambigu - bahkan bagi saya sebagai manusia - apa yang Anda inginkan di sini, sehingga komputer tidak memiliki kesempatan. Mungkin penerjemah bash mencoba untuk mendapatkan $ 212. Bash diam-diam gagal jika Anda mencoba memperluas variabel yang tidak ada, sehingga $ akan dihapus. Pertimbangkan untuk memasukkan variabel Anda di dalam tanda kurung, misalnya "$ 1092 {2} 12"
Brian Peterson

Jawaban:

18

Variabel masih diperluas dalam tanda kutip ganda. Jika Anda ingin menghindari perilaku ini, Anda harus menggunakan tanda kutip tunggal sebagai gantinya.

Caleb
sumber
Terima kasih. Ini bekerja. Apakah ada alasan untuk ini?
Amir Afghani
8
Iya. Itu dirancang seperti itu! Ini sebenarnya cukup berguna untuk dapat memperluas variabel di dalam string yang dikutip. Itu fitur. Jika Anda tidak menginginkan perilaku tersebut, gunakan tanda kutip tunggal, untuk itulah mereka dirancang.
Caleb