Потому что, когда вы помещаете "${BASE_COMMAND} --limit-rate=${RATE_LIMIT}"
в кавычки, bash интерпретирует его как одно слово и пытается найти команду с этим именем.Он ищет программу, которая буквально имеет имя
screen wget --continue --directory-prefix=../sample.ext --tries=2 --input-file=sample.ext --limit-rate=300K
пробелы и все.Очевидно, что этого не существует.Решение состоит в том, чтобы оставить это без кавычек, чтобы bash интерпретировал его как список разделенных пробелами слов и понял, что сама команда просто screen
.
Кстати, нет необходимости использовать $()
либо, если вы не пытаетесь захватить вывод команды.Это было бы хорошо:
DOWNLOAD_PATH="sample.ext"
RATE_LIMIT="300K"
mkdir ../$DOWNLOAD_PATH
BASE_COMMAND="screen wget --continue --directory-prefix=../$DOWNLOAD_PATH --tries=2 --input-file=$DOWNLOAD_PATH"
${BASE_COMMAND} --limit-rate=${RATE_LIMIT}