bash -c “v = value; echo $ v ”tidak menampilkan apa pun

Jawaban:

18

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=valueberlangsung 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
heemayl
sumber
1

Dengan kutipan ganda $vakan diganti dengan shell interaktif. Gunakan satu kutipan:

$ bash -c 'v=value;echo $v'
value

sumber