Как говорит Джейхендрен, вы должны использовать двойные кавычки, когда хотите интерполировать переменную. Но если ваше имя переменной находится непосредственно рядом с допустимыми символами имени переменной, вам нужно указать bash, где имя переменной начинается и заканчивается, заключив имя в фигурные скобки. Довольно сложно понять, что вы имеете в виду, когда описываете свою проблему в чем-то, что выглядит как код, но не выполняется, чтобы дать желаемый результат (или создает очень своеобразный fqdn), но я думаю, вы должны делать что-то вроде .. ..
ADDR="http://lookup.api.com/"
export ADDR
...
curl -s -o "${OUTPUTFILE}" "${ADDR}some/path"
Или вы имеете в виду, что URL-адрес, который вы действительно хотите получить, состоит из фрагмента, возвращенного из http://lookup.api.com ? В этом случае вам следует найти большую палку и использовать ее, чтобы многократно избивать человека, написавшего API, крича «302! 302! 302!». Если они намного больше вас или у вас есть ружье, вы можете рассмотреть метод, предложенный джайхедреном, однако, хотя он изящно лаконичен, это не особенно надежное решение. Вместо этого рассмотрим:
FRAG=`curl -s -o "${ADDR}some/path" | tr -d '\040\011\012\015'`
curl -s -o "${OUTPUTFILE}" "${ADDR}some/path"
Используйте двойные кавычки вместо одинарных:
SERVER_ADDRESS="$(curl -s http://lookup.api.com).restofaddress.com"
Интерполяции и расширения (например, раскрытие переменных или раскрытие команд, как в данном случае) выполняются внутри строк в двойных кавычках, но не в строках в одинарных кавычках.