Bash: Различия наблюдаются при выполнении команды напрямую и при выполнении той же команды, хранящейся в строке - PullRequest
0 голосов
/ 08 октября 2018

Ask :

Я пытаюсь понять разницу между непосредственным выполнением команды и ее сохранением в строке при использовании Bash.

Подробности :

Я пытаюсь выполнить команду CURL POST.Поскольку я создаю команду, получая входные данные от пользователя, я хочу записать точную команду, которую я выполняю.Для этого я собрал команду в строку и попытался ее выполнить.Тем не менее, я вижу, что он не работает одинаково в обоих случаях (я заменил реальные значения поддельными значениями, чтобы не раскрывать конфиденциальную информацию):

curl_command_1="curl --write-out "%{response_code}" --silent -X POST -H 'Content-Type: application/json' "${http_command}/resource" -d '{ "argument1": "'"${argument1}"'", "argument2": "'"${argument2}"'", "argument3": "'"${argument3}"'" }'"
echo $curl_command_1
ret_val_1=eval $curl_command_1
echo $ret_val_1
ret_val_2=`$curl_command_1`
echo $ret_val_2
ret_val_3=`curl --write-out "%{response_code}" --silent -X POST -H 'Content-Type: application/json' "${http_command}/resource" -d '{ "argument1": "'"${argument1}"'", "argument2": "'"${argument2}"'", "argument3": "'"${argument3}"'" }'`
echo $ret_val_3

curl_command_2="curl --write-out "%{response_code}" --silent -X POST -H 'Content-Type: application/json' "${http_command}/resource" -d '{ "argument1": \"${argument1}\", "argument2": \"${argument2}\", "argument3": \"${argument3}\" }'"
echo $curl_command_2
ret_val_1=eval $curl_command_2
echo $ret_val_1
ret_val_2=`$curl_command_2`
echo $ret_val_2
ret_val_3=`curl --write-out "%{response_code}" --silent -X POST -H 'Content-Type: application/json' "${http_command}/resource" -d '{ "argument1": \"${argument1}\", "argument2": \"${argument2}\", "argument3": \"${argument3}\" }'`
echo $ret_val_3

Замечания:

  1. Третий случай прекрасно работает как в случае успеха, так и в случае неудачи.
  2. В первых двух случаях я получаю большую строку чисел в качестве выходных данных как в случае успеха, так и в случае неудачи.Не уверен почему.

Подтверждение используемых значений:

  1. Поскольку это команда POST, я не выполнил все три с одинаковыми значениями в одномвыполнение.Я использовал допустимые значения для трех аргументов в каждом случае.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...