Tôi không nghĩ có ai trả lời được câu hỏi. Anh ta không hỏi liệu anh ta có thể lặp lại các chuỗi theo thứ tự hay không. Thay vào đó, tác giả của câu hỏi muốn biết liệu anh ta có thể mô phỏng hành vi của con trỏ hàm hay không.
Có một số câu trả lời giống như những gì tôi sẽ làm và tôi muốn mở rộng nó bằng một ví dụ khác.
Từ tác giả:
function x() {
echo "Hello world"
}
function around() {
echo "before"
($1) <------ Only change
echo "after"
}
around x
Để mở rộng điều này, chúng ta sẽ có hàm x echo "Hello world: $ 1" để hiển thị thời điểm thực thi hàm thực sự xảy ra. Chúng ta sẽ chuyển một chuỗi là tên của hàm "x":
function x() {
echo "Hello world:$1"
}
function around() {
echo "before"
($1 HERE) <------ Only change
echo "after"
}
around x
Để mô tả điều này, chuỗi "x" được truyền cho hàm xung quanh () mà nó lặp lại là "trước", gọi hàm x (thông qua biến $ 1, tham số đầu tiên được truyền vào xung quanh) truyền đối số "HERE", cuối cùng vọng lại sau .
Ngoài ra, đây là phương pháp sử dụng các biến làm tên hàm. Các biến thực sự giữ chuỗi là tên của hàm và ($ biến arg1 arg2 ...) gọi hàm truyền các đối số. Xem bên dưới:
function x(){
echo $3 $1 $2 <== just rearrange the order of passed params
}
Z="x"
($Z 10 20 30)
cho: 30 10 20, trong đó chúng tôi thực thi hàm có tên "x" được lưu trữ trong biến Z và truyền các tham số 10 20 và 30.
Ở trên, nơi chúng tôi tham chiếu các hàm bằng cách gán tên biến cho các hàm để chúng tôi có thể sử dụng biến thay vì thực sự biết tên hàm (tương tự như những gì bạn có thể làm trong tình huống con trỏ hàm rất cổ điển trong c để tổng quát hóa luồng chương trình nhưng trước -chọn các lệnh gọi hàm mà bạn sẽ thực hiện dựa trên các đối số dòng lệnh).
Trong bash, đây không phải là các con trỏ hàm, mà là các biến tham chiếu đến tên của các hàm mà bạn sử dụng sau này.