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
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.
Bir Bash Komut bir dizi rastgele sayı...
Nasıl bir bash komut ile CPU bir başak...
(Mac) -bash: ___ps1: gıt bulunan komut...
Nasıl bağımsız bir Bash komut dosyası ...
Zaman aşımı gereksiz gecikme olmadan b...