(可选)在 curl 请求中包含用户和密码?
Optionally include a user and password in curl request?
我可以选择在 curl 请求中包含用户和密码,如下所示:
declare creds=""
if [ -n "$user" ] && [ -n "$password" ]; then
creds="-u ${user}:${password}"
fi
output=$(curl ${creds} -X PUT -v --write-out "%{http_code}" "$url" \
-H 'Content-Type: application/json' -s -o /dev/null --data "${payload}")
这似乎工作正常,但我收到了这个 shellcheck 警告:
Double quote to prevent globbing and word splitting
https://github.com/koalaman/shellcheck/wiki/SC2086
用引号引起来是行不通的,例如如果我这样做:
output=$(curl "${creds}" -X PUT -v --write-out "%{http_code}" "$url" \
-H 'Content-Type: application/json' -s -o /dev/null --data "${payload}")
然后当未提供用户名和密码时,这会导致 curl 请求中出现空双引号 curl "" -X PUT ...
,从而产生 <url> malformed
错误。
我可以对 curl 命令使用 if-else,但我宁愿避免重复。尽管有 shellcheck 警告,上述方法是否可以接受?
您在变量周围加上引号是正确的,但是 shellcheck
没有抓住将命令存储在有其自身缺陷的变量中的问题。由于这是 shell 功能的一个问题,shellcheck
无法立即捕捉到它。当你在下面做的时候
creds="-u ${user}:${password}"
并引用 "$creds"
,它作为一个单独的参数字传递给 curl
,而不是分别分解为 -u
和 "${user}:${password}"
。正确的方法应该是使用一个数组来存储命令并扩展它,这样单词就会被保留而不被 shell 分割(引用变量的首要原因,如 shellcheck
所示) )
creds=(-u "${user}:${password}")
并调用
curl "${creds[@]}" <rest-of-the-cmd>
同时探索以下内容
- I'm trying to put a command in a variable, but the complex cases always fail!
- How to store a command in a variable in a shell script?
我可以选择在 curl 请求中包含用户和密码,如下所示:
declare creds=""
if [ -n "$user" ] && [ -n "$password" ]; then
creds="-u ${user}:${password}"
fi
output=$(curl ${creds} -X PUT -v --write-out "%{http_code}" "$url" \
-H 'Content-Type: application/json' -s -o /dev/null --data "${payload}")
这似乎工作正常,但我收到了这个 shellcheck 警告:
Double quote to prevent globbing and word splitting
https://github.com/koalaman/shellcheck/wiki/SC2086
用引号引起来是行不通的,例如如果我这样做:
output=$(curl "${creds}" -X PUT -v --write-out "%{http_code}" "$url" \
-H 'Content-Type: application/json' -s -o /dev/null --data "${payload}")
然后当未提供用户名和密码时,这会导致 curl 请求中出现空双引号 curl "" -X PUT ...
,从而产生 <url> malformed
错误。
我可以对 curl 命令使用 if-else,但我宁愿避免重复。尽管有 shellcheck 警告,上述方法是否可以接受?
您在变量周围加上引号是正确的,但是 shellcheck
没有抓住将命令存储在有其自身缺陷的变量中的问题。由于这是 shell 功能的一个问题,shellcheck
无法立即捕捉到它。当你在下面做的时候
creds="-u ${user}:${password}"
并引用 "$creds"
,它作为一个单独的参数字传递给 curl
,而不是分别分解为 -u
和 "${user}:${password}"
。正确的方法应该是使用一个数组来存储命令并扩展它,这样单词就会被保留而不被 shell 分割(引用变量的首要原因,如 shellcheck
所示) )
creds=(-u "${user}:${password}")
并调用
curl "${creds[@]}" <rest-of-the-cmd>
同时探索以下内容
- I'm trying to put a command in a variable, but the complex cases always fail!
- How to store a command in a variable in a shell script?