Я создал скрипт, который нуждался в некоторой интерактивности в нем, так что я сделал следующую функцию:оболочки - передача имени функции в качестве параметра
function check(){
echo $1
read ans
if [ -z $ans ] || [ $ans = "y" ]; then
$2 ${*:3}
fi
}
Теперь я могу использовать это с:
check "shall I greet?" say_hello oz123 stackoverflow
check "Do you leave?" say_goodbye
Учитывая функции:
function say_hello(){
echo hello $1
echo hello $2
}
function say_goodbye(){
echo "Goodbye..."
}
я придумал check
простым суда, расстойки, если Я могу дать имя функции в качестве параметра для функции. Видимо, это работает, но я не понимаю, почему. Можете ли вы объяснить, почему?
Когда вы пишете 'say_goodbye' в приглашении' $ '(или что-то еще), вы используете команду по имени строки. Почему бы не работать с другой функцией? –
Я ожидал, что оболочка сначала оценит функцию, но, по-видимому, оболочка умнее, чем я думал. – Oz123
Вы не говорите оболочке, чтобы оценить любую функцию (не то, что это действительно даже вещь). Вы пишете слово. Слова - это только команды, когда они начинают линию. Подумайте о «echo echo word»? Это не отображает 'word', он отображает' echo word' и т. Д. Сравните это с 'echo $ (echo word)' хотя (там, где вы явно сообщаете оболочке для запуска команды из части вашей строки). –