Bir comand satırı ekranından aşağıdakileri yürütme:
bash -c "v=value; echo $v"
hiçbir şey göstermez. Tamam? Bu tür bir yürütme içindeki bir değişkene nasıl değer atayabilirim?
Bir comand satırı ekranından aşağıdakileri yürütme:
bash -c "v=value; echo $v"
hiçbir şey göstermez. Tamam? Bu tür bir yürütme içindeki bir değişkene nasıl değer atayabilirim?
Yanıtlar:
Burada iki kabuk var:
Arama kabuğu, bunu çalıştırdığınız etkileşimli kabuk
Giriş yapmayan, etkileşimli olmayan kabuk, bash -c
Şimdi, sorun, çift tırnak içinde değişkenler ilgili değerlerine genişletilir, bu herhangi bir kabuk için geçerlidir.
Yani, çift tırnak kullandığınız gibi, değişken genişleme, $v
aslında çağrılan kabukta değil, çağrılan kabukta gerçekleşir. Ancak bildiri, v=value
etkileşimli olmayan kabuk üzerinde gerçekleşiyor.
Yani, toplamda, çağrılan kabukta tanımlanan ve çağrılan kabukta (önceden) genişletilen değişkene sahipsiniz. Değer değişkeni çağrı kabuğunda ayarlanmadığından, çıktıda hiçbir şey almazsınız.
Şimdi, değişken tanım ve genişlemeyi ortaya çıkan kabukta yer alacak şekilde yapmak için tek tırnak kullanın veya kaçın $
:
$ bash -c "v=value; echo $v"
$ bash -c 'v=value; echo $v'
value
$ bash -c "v=value; echo \$v"
value
Çift tırnak ile $v
etkileşimli kabuk yerini alır. Tek tırnak kullanın:
$ bash -c 'v=value;echo $v'
value