Bash 如何将变量传递到curl中

Bash 如何将变量传递到curl中,bash,shell,curl,Bash,Shell,Curl,关于将变量放入url中的curl命令还有其他问题 我希望在脚本顶部定义一个变量,以交换如下值: # MODE=-v MODE='-sS -w "\nEffective URL: %{url_effective} \nSize: %{size_download} \nTotal time: %{time_total} \nRedirect URL: %{redirect_url}"' PAGE=$(curl $MODE --include --location --config curl.con

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

我希望在脚本顶部定义一个变量,以交换如下值:

# MODE=-v
MODE='-sS -w "\nEffective URL: %{url_effective} \nSize: %{size_download} \nTotal time: %{time_total} \nRedirect URL: %{redirect_url}"'
PAGE=$(curl $MODE --include --location --config curl.config $TARGET1) 
并在以下几个curl请求中使用它:

# MODE=-v
MODE='-sS -w "\nEffective URL: %{url_effective} \nSize: %{size_download} \nTotal time: %{time_total} \nRedirect URL: %{redirect_url}"'
PAGE=$(curl $MODE --include --location --config curl.config $TARGET1) 
不幸的是,我尝试过的引号($MODE或$TARGET1)或
${MODE}
的任何变体都不会导致-w选项被接受并出现在$PAGE的底部。用长版本替换
$MODE
时,它工作正常

这是如何实现的?

一种方法

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
另一种(类似的)方式。还建议您引用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")"

美好的你知道为什么模式变量不能正确展开吗?史蒂文,我不理解你的编辑和第二个代码块中的代码。
$set-x
在做什么?第二,什么是第二行?这看起来像我的原创…谢谢你对uc名字的评论。这个解决方案似乎更接近这个问题。