询问:
我试图了解直接执行命令与在使用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
命令,因此我没有在一次执行中执行所有三个具有相同值的命令。在每种情况下,我都使用了三个参数的允许值。