3

关于将变量放入 url 中的 curl 命令还有其他问题。

我想在脚本顶部定义一个变量来交换值,如下所示:

# MODE=-v
MODE='-sS -w "\nEffective URL: %{url_effective} \nSize: %{size_download} \nTotal time: %{time_total} \nRedirect URL: %{redirect_url}"'

并在几个 curl 请求中使用它,如下所示:

PAGE=$(curl $MODE --include --location --config curl.config $TARGET1) 

不幸的是,引用($MODE 或 $TARGET1)或${MODE}我尝试过的任何变体都不会导致 -w 选项被接受并出现在 $PAGE 的底部。$MODE替换为长版本时效果很好。

如何使它起作用?

4

2 回答 2

2

一种方法

w=(
  '\nEffective URL: %{url_effective}'
  '\nSize: %{size_download}'
  '\nTotal time: %{time_total}'
  '\nRedirect URL: %{redirect_url}'
)
curl -Ss --include --location --config curl.config -w "${w[*]}" icanhazip.com

当您按照自己的方式进行操作时,就会发生分词,因此-w字符串会在每个空格上进行拆分,而不是作为单个字符串传递。

$ set -x

$ : curl $MODE --include --location --config curl.config icanhazip.com
+ : curl -sS -w '"\nEffective' URL: '%{url_effective}' '\nSize:' '%{size_download}' '\nTotal' time: '%{time_total}' '\nRedirect' URL: '%{redirect_url}"' --include --location --config curl.config icanhazip.com
于 2013-05-15T23:46:04.240 回答
2

另一种(类似的)方式。还建议您引用URI之类的变量。第二点是要注意大写变量名。因为它们很容易因环境变量等而崩溃。

#!/bin/bash

url="$1"

w=("-sS"
"-w
Effective URL: %{url_effective}
Size         : %{size_download}
Total time   : %{time_total}
Redirect URL : %{redirect_url}"
)

page="$(curl "${w[@]}" --include --location --config curl.config "$url")"
于 2013-05-16T00:10:31.857 回答