SORU
16 HAZİRAN 2012, CUMARTESİ


eval Bash komut ve tipik kullanımları

Bu açıdan bash man sayfaları okuduktan sonra ve post.

Hala tipik kullanımları olurdu bela eval komutun ne yaptığını anlamak zorunda ve ben. Örneğin eğer yaparsak:

bash$ set -- one two three  # sets $1 $2 $3
bash$ echo $1
one
bash$ n=1
bash$ echo ${$n}       ## First attempt to echo $1 using brackets fails
bash: ${$n}: bad substitution
bash$ echo $($n)       ## Second attempt to echo $1 using parentheses fails
bash: 1: command not found
bash$ eval echo \${$n} ## Third attempt to echo $1 using 'eval' succeeds
one

Burada tam olarak ne oluyor ve nasıl dolar işareti ve eğik çizgi sorunu içine kravat mı?

CEVAP
16 HAZİRAN 2012, CUMARTESİ


eval argüman olarak bir dize alır ve eğer komut satırında dize yazmış olsaydın olarak değerlendirir. Eğer birden fazla bağımsız değişken geçirirseniz (ilk aralarında boşluk ile birleştirilir.)

${$n} bash sözdizimi hatası var. Parantez içinde, tek bir değişken adı, bazı olası önek ve sonek ile olabilir, ama keyfi bash sözdizimi alamazsınız ve özellikle değişken genişleme kullanabilirsiniz. Demenin bir yolu yoktur “bu değişkeni olan değişken değeri”, ama:

echo ${!n}
one

$(…) komutu bir kabuk (geçerli kabuğundan değişken değerleri gibi tüm ayarları devralır ayrı bir işlem yani) parantez içinde belirtilen devam edecek ve çıkış toplar. echo $($n) shell komutu gibi $n çalıştırır ve çıktısını gösterir. $n 12*,* 13 ** komut çalıştırmayı dener değerlendirir yok 1 beri.

eval echo \${$n} parametreleri eval geçirilen çalışır. Genişleme sonra, bu parametreleri echo ${1}. eval echo \${$n} komut echo ${1} çalışır.

Çoğu zaman, değişken kısaltmaları ve komut susbtitutions çift tırnak kullanmanız gerektiğini unutmayın ($bir şey var her zaman yani): "$foo", "$(foo)".Her zaman değişken ve komut kısaltmaları çift tırnak koyunsürece biliyorsun onları terk et. Çift tırnak işaretleri olmadan, kabuk, alan bölme (yani ayrı kelimelere değişken değeri veya komut çıktısı böler) yapar ve sonra bir joker desen olarak her kelime davranır. Örneğin:

$ ls
file1 file2 otherfile
$ set -- 'f* *'
$ echo "$1"
f* *
$ echo $1
file1 file2 file1 file2 otherfile
$ n=1
$ eval echo \${$n}
file1 file2 file1 file2 otherfile
$eval echo \"\${$n}\"
f* *
$ echo "${!n}"
f* *

eval çok sık kullanılmaz. Deniz kabuğu içinde, en yaygın kullanımı, çalışma zamanı kadar bilinen bir değişkenin değerini elde etmektir. Bash, bu ${!VAR} sözdizimi için gerekli teşekkürler. eval uzun bir komut işleçler içeren, özel amaçlı sözcükler, vb oluşturmak için gereken zaman hala yararlıdır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Arun Kumar

    Arun Kumar

    18 Mart 2010
  • Dom Esposito

    Dom Esposito

    26 Mayıs 2011
  • ElChakotay Andrich

    ElChakotay A

    10 EKİM 2013