【发布时间】:2018-09-26 21:31:15
【问题描述】:
这与Prevent bash from adding single quotes to variable output 非常相似,但这些答案都没有帮助我。
这个脚本:
set -ex
curl_headers=(
--silent
"--form release_description=$'\n new \n'"
)
curl "${curl_headers[@]}" "example.com"
返回这个输出:
+ curl_headers=(--silent "--form release_description=$'\n new \n'")
+ curl --silent '--form release_description=$'\''\n new \n'\''' example.com
它正在做两件我不想要的事情。它在--form 之前添加了一个刻度,它正在转义我的release_description 中的单个刻度
想要的结果是:
curl --silent --form release_description=$'\n new \n' example.com
如何让它删除转义序列并添加单个刻度?
【问题讨论】:
-
请看这里的最后一段:stackoverflow.com/a/25777854/1566221
-
$''是它自己的引用风格。如果将$''语法嵌套在双引号内,则您处于双引号上下文中,而不是$''-quoted 上下文。 -
另外,请注意
set -x以一种引用样式编写的内容并以不同的引用样式回显它是完全合法的,只要底层字符串被表示(因此,传递给调用的程序)是一样的。换一种说法,set -x使用的表示对curl看待世界的方式没有影响,无论是双引号、单引号、$''-引号等。 -
...另外,请注意
set -e颇具争议——它的行为常常令人惊讶,并且可能导致比它解决的问题更多的问题(f/e,它可以改变函数的方式行为取决于任何其他代码是否基于该函数的返回代码进行分支);那是在由于其行为随时间发生变化的地方而导致版本不兼容之前。请参阅the exercises in BashFAQ #105(以及该页面中的各种链接)以确保您知道自己要进入的内容。 -
这个故事的寓意:不要相信
set -ex。下面的答案使用set -ex看起来是错误的,但会起作用