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
Замечания:
- Третий случай прекрасно работает как в случае успеха, так и в случае неудачи.
- В первых двух случаях я получаю большую строку чисел в качестве выходных данных как в случае успеха, так и в случае неудачи.Не уверен почему.
Подтверждение используемых значений:
- Поскольку это команда
POST
, я не выполнил все три с одинаковыми значениями в одномвыполнение.Я использовал допустимые значения для трех аргументов в каждом случае.