Вы хотите использовать eval:
action="restart machine each 1 min"
eval echo $1 \$$1
Обратите внимание, что выполнение чего-то подобного является огромной угрозой безопасности.Подумайте, что произойдет, если пользователь вызовет скрипт с первым аргументом "; rm -rf /"
Вероятно, вы можете решить такие проблемы с помощью:
eval "echo '$1' \"\$$1\""
, но на самом деле вы просто спрашиваетеиз-за проблем (эта последняя версия будет бороться, если первый аргумент содержит двойные кавычки, а конструкция $ () позволит выполнить произвольную команду).Гораздо безопаснее просто использовать оператор case и убедиться, что аргумент точно соответствует строке, которую вы ищете.Или, по крайней мере, убедитесь, что аргумент, который вы используете, не содержит ни одного из следующих символов: ;()$"'
.Вероятно, безопаснее проверить, что он содержит только буквенно-цифровые символы (a-zA-Z0-9
)