Допустим, у меня есть:

function x {
    echo "x"
}
call_func="x"

Теперь я могу просто использовать eval следующим образом:

eval $call_func

Но мне было интересно, есть ли другой способ вызвать функцию (если она существует), имя которой хранится в переменной: call_func.

36
hjpotter92 28 Окт 2015 в 12:26

2 ответа

Лучший ответ

Вы должны иметь возможность просто вызвать функцию напрямую, используя

$call_func

Для всего остального ознакомьтесь с этим ответом: https://stackoverflow.com/a/17529221/3236102 Это не совсем то, что вам нужно, но показывает множество различных способов вызова команд / функций.

Однако позволять пользователю выполнять произвольный код - плохая практика, поскольку это может быть довольно опасно. Лучше было бы сделать так:

if [ $userinput == "command" ];then
    command
fi

Таким образом, пользователь может выполнять только те команды, которые вы хотите, и даже может выводить сообщение об ошибке, если ввод был неправильным.

35
Dakkaron 7 Ноя 2017 в 10:24

Пожалуйста, обратите внимание на:

Переменные содержат данные, функции содержат код.

Смешивать их - плохая практика, не пытайтесь это делать.


Да, просто используйте var. Если переменная a была установлена ​​параметром a=ls, то:

$ $a

Выполнит ls. Первый $ - это строка приглашения оболочки.

3
28 Окт 2015 в 09:51