Как процитировать команду сценария оболочки?

#shell #quotes

#оболочка #кавычки

Вопрос:

Я пытаюсь сформировать параметрический вызов curl из сценария оболочки

 header_string="--header "X-param1: 1" --header "X-param2: 2""
url="http://example.com"
command="curl $header_string $url"

a=`${command}`
  

Это не работает, потому что оно интерпретируется как

 curl --header '"X-param1:' '1"' --header '"X-param2:' '2"' http://example.com
  

Как я могу процитировать это правильно?

Ответ №1:

Если вы используете BASH, вы можете эффективно использовать массивы BASH:

 header_string=(--header "X-param1: 1" --header "X-param2: 2")
url="http://example.com"
command="$(curl -s "${header_string[@]}" "$url")"
  

Но если вы используете old sh , тогда используйте dreaded eval :

 header_string="--header "X-param1: 1" --header "X-param2: 2""
url="http://example.com"
command=`eval "curl $header_string $url"`
  

Комментарии:

1. Хорошее (ab) использование eval . 1.

2. Предпочтительный способ — использовать BASH и избегать eval 🙂