История изменений
Исправление vodz, (текущая версия) :
Извне - это значит, что на момент написания скрипта мв не знаем какие команды будем выполнять.
Простите, вы путаете с компилятором. Для интерпретатора:
read cmd
$cmd
Если бы знали - можно было бы обойтись без eval.
Удивительно, как тяжело человечество скрипит, когда пытается даже одну рекурсию в мозгах провернуть. Именно знание, какой набор команд и аргументов будет выполнять eval и есть залог его безопасного применения, без этого применять нельзя. Чувствуете разницу? Особенно с вышеприведенным «скриптом».
Дело в том, что не только в других shell-ах не желают добавлять конструкции, которые позволяют обойтись без eval, такие как массивы, косвенная адресация по имени переменной к переменной. Но даже в bash такие конструкции неполноценные, а если и добавляются, то по чайной ложке в пятилетку. Вот у меня куча хостов, на которых нет declare -n, потому что bash 4.2. Многомерных массивов похоже вообще не появится никогда. Является ли это проблемой? А по моему, проблема у тех, кто так и не понял, что такое eval.
Исправление vodz, :
Извне - это значит, что на момент написания скрипта мв не знаем какие команды будем выполнять.
Простите, вы путаете с компилятором. Для интерпретатора:
read cmd
$cmd
Если бы знали - можно было бы обойтись без eval.
Удивительно, как тяжело человечество скрипит, когда пытается даже одну рекурсию в мозгах провернуть. Именно знание, какой набор команд и аргументов будет выполнять eval и есть залог его безопасного применения, без этого применять нельзя. Чувствуете разницу?
Дело в том, что не только в других shell-ах не желают добавлять конструкции, которые позволяют обойтись без eval, такие как массивы, косвенная адресация по имени переменной к переменной. Но даже в bash такие конструкции неполноценные, а если и добавляются, то по чайной ложке в пятилетку. Вот у меня куча хостов, на которых нет declare -n, потому что bash 4.2. Многомерных массивов похоже вообще не появится никогда. Является ли это проблемой? А по моему, проблема у тех, кто так и не понял, что такое eval.
Исходная версия vodz, :
Извне - это значит, что на момент написания скрипта мв не знаем какие команды будем выполнять.
Простите, вы путаете с компилятором. Для интерпретатора:
read cmd
$cmd
Если бы знали - можно было бы обойтись без eval.
Удивительно, как тяжело человечество скрипит, когда пытается даже одну рекурсию в мозгах провернуть. Именно знание, какой набор команд и аргументов будет выполнять eval и есть залог его безопасного применения, без этого применять нельзя. Чувствуете разницу?
Дело в том, что не только в других shell-ах не желают добавлять конструкции, которые позволяют обойтись без eval, такие как массивы, косвенная адресация по имени переменной к переменной. Но даже в bash такие конструкции неполноценные, а если и добавляются, то по чайной ложки в пятилетку. Вот у меня куча хостов, на которых нет declare -n, потому что bash 4.2. Многомерных массивов похоже вообще не появится никогда. Является ли это проблемой? А по моему, проблема у тех, кто так и не понял, что такое eval.