Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell bash:替换'内的变量值';_Shell_Variables - Fatal编程技术网

Shell bash:替换'内的变量值';

Shell bash:替换'内的变量值';,shell,variables,Shell,Variables,抱歉,如果问题很直截了当,但我是shell脚本的新手。 我试着写这样的东西: for i in {1..20} do curl "something $i ........ -d 'something "$i" something' " done 问题是未替换单引号部分“”中的第二个$i。应该怎么做才能让它工作 这是因为单引号内的变量未被替换。如果需要变量替换,则需要去掉单引号 你可以预先初始化这个变量 foo="something $i bla bla bla" curl "some

抱歉,如果问题很直截了当,但我是shell脚本的新手。 我试着写这样的东西:

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

问题是未替换单引号部分“”中的第二个
$i
。应该怎么做才能让它工作

这是因为单引号内的变量未被替换。如果需要变量替换,则需要去掉单引号

你可以预先初始化这个变量

foo="something $i bla bla bla"
curl "something ... ${foo}something"

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

将其更改为以下内容:

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

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

$ foo=bar $ eval "echo \"something \\\"$foo\\\"\"" something "bar" $foo=bar $eval“echo\”something\\\“$foo\\\”“” 一些“酒吧”
请注意,在最里面的
”之前有三个
\
,因为这将扩展两次(一次是在计算
eval
的参数时,一次是在计算
echo
的参数时)

,即使整个语句是一个包含在?是的,变量替换在双引号内工作。“”。我看这没问题。正如我提到的,只有单引号内的变量不会被替换。