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?
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?
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 $
:
$ bash -c "v=value; echo $v"
$ bash -c 'v=value; echo $v'
value
$ bash -c "v=value; echo \$v"
value
Dengan kutipan ganda $v
akan diganti dengan shell interaktif. Gunakan satu kutipan:
$ bash -c 'v=value;echo $v'
value