Menjalankan berikut ini dari layar baris perintah:
bash -c "v=value; echo $v"
tidak menampilkan apa pun. Tidak apa-apa? Bagaimana saya bisa memberikan nilai pada variabel di dalam jenis eksekusi ini?
bash
environment-variables
Josep Cols
sumber
sumber
Jawaban:
Ada dua cangkang yang terlibat di sini:
Shell panggilan, shell interaktif dari mana Anda menjalankan ini
Shell non-login, non-interaktif, dihasilkan oleh
bash -c
Sekarang, masalahnya adalah, dalam tanda kutip ganda variabel diperluas ke nilai masing-masing, ini berlaku untuk setiap shell.
Jadi, karena Anda telah menggunakan tanda kutip ganda, ekspansi variabel
$v
,, sebenarnya terjadi di shell panggilan, bukan shell yang disebut. Tetapi deklarasi,,v=value
berlangsung di shell yang disebut non-interaktif.Jadi, secara total, Anda memiliki variabel yang ditentukan dalam shell yang dipanggil dan diperluas (sebelumnya) di shell panggilan. Karena variabel nilai tidak disetel dalam shell panggilan, maka Anda tidak mendapatkan apa-apa di output.
Sekarang, untuk membuat definisi variabel dan ekspansi terjadi di shell yang muncul, gunakan tanda kutip tunggal atau melarikan diri
$
:sumber
Dengan kutipan ganda
$v
akan diganti dengan shell interaktif. Gunakan satu kutipan:sumber