Kimsenin soruyu tam olarak cevapladığını sanmıyorum. Dizeleri sırayla yankılayıp yankılamayacağını sormadı. Daha ziyade, sorunun yazarı, işlev işaretçisi davranışını simüle edip edemeyeceğini bilmek ister.
Yaptığıma çok benzeyen birkaç cevap var ve bunu başka bir örnekle genişletmek istiyorum.
Yazardan:
function x() {
echo "Hello world"
}
function around() {
echo "before"
($1) <------ Only change
echo "after"
}
around x
Bunu genişletmek için x echo "Merhaba dünya: $ 1" fonksiyonuna sahip olacağız ve fonksiyonun gerçekten ne zaman çalıştığını göstereceğiz. "X" işlevinin adı olan bir dizge geçeceğiz:
function x() {
echo "Hello world:$1"
}
function around() {
echo "before"
($1 HERE) <------ Only change
echo "after"
}
around x
Bunu açıklamak için, "x" dizisi "önce" yankılanan () etrafında işleve geçirilir, x işlevini çağırır ($ 1 değişkeni aracılığıyla, ilk parametre etrafa iletilir) "HERE" bağımsız değişkenini iletir ve sonunda yankılanır .
Diğer bir yana, bu, değişkenleri işlev adları olarak kullanma yöntemidir. Değişkenler aslında işlevin adı olan dizeyi tutar ve ($ değişken arg1 arg2 ...) bağımsız değişkenleri geçiren işlevi çağırır. Aşağıya bakınız:
function x(){
echo $3 $1 $2 <== just rearrange the order of passed params
}
Z="x"
($Z 10 20 30)
verir: 30 10 20, burada Z değişkeninde depolanan "x" adlı işlevi çalıştırdık ve 10 20 ve 30 parametrelerini geçtik.
Fonksiyonlara değişken isimleri atayarak fonksiyonlara referans verdiğimiz yerin üstünde, böylece fonksiyon adını gerçekten bilmek yerine değişkeni kullanabiliriz (bu, program akışını genelleştirmek için c'deki çok klasik bir fonksiyon işaretçisi durumunda yapabileceğinize benzer, ancak ön - komut satırı argümanlarına göre yapacağınız işlev çağrılarını seçmek).
Bash'de bunlar işlev işaretçileri değil, daha sonra kullanacağınız işlevlerin adlarına atıfta bulunan değişkenlerdir.