3

对不起,如果问题非常简单,但我是 shell 脚本的新手。我正在尝试写这样的东西:

for i in {1..20}
do
   curl "something $i ........ -d  'something "$i" something' "
done

问题是$i单引号部分 '' 中的第二个没有被替换。应该怎么做才能让它工作?

4

3 回答 3

5

如上所述,单引号内不展开参数,必须使用双引号。唯一的一点是,由于它出现在已经用双引号引起来的字符串中,因此您必须使用反斜杠 ( \) 将它们转义,如下所示:

$ foo=bar
$ eval "echo \"something \\\"$foo\\\"\""
一些“酒吧”

\请注意,在最内层之前有三个",因为这将被扩展两次(一次在评估 的参数时eval,一次在评估 的参数时echo

于 2012-10-24T07:56:14.283 回答
2

这是因为单引号内的变量''没有被替换。如果你想要变量替换,你需要去掉单引号。

你也许可以预先初始化那个变量

foo="something $i bla bla bla"
curl "something ... ${foo}something"
于 2012-10-24T07:40:05.393 回答
0

您的引用不正确。您不需要在第二个周围加上双引号,$i因为整个内容已经用双引号括起来了。

将其更改为以下内容:

for i in {1..20}
do
   curl "something $i ........ -d  'something $i something'"
done
于 2012-10-24T07:41:04.103 回答