这真的快把我逼疯了。我试着把一个命令存储在c shell变量中,然后用eval来执行它。但是我总是找不到“}”
set temp="curl -v --location --request POST 'http://127.0.0.1:65000/foo/bar/load' --header 'Content-Type: application/json' --data-raw '{ "modelType": "john", "resource": "doe" }'"
eval $temp
请帮帮忙。
2条答案
按热度按时间djmepvbi1#
shell提供两个字符串:单引号(')和双引号(“)。区别在于使用单引号可以防止对字符串内容的任何解释(例如变量),而使用双引号则允许对字符串内容的任何解释。如果混合使用这两种引号,请确保正确转义字符串。
防止错误的一个简单方法是在字符串中使用单引号或双引号,但不应混用这两种引号。下面是一些示例:
要解决此问题,请将字符串更改为:
在字符串内使用双引号,字符串用单引号括起来。
如果将创建的变量传递给命令,请确保使用引号。在这种情况下,变量将被解释为单个参数。代码应如下所示:
请考虑eval是一个危险的命令。
要了解更多信息,我强烈推荐Paul DuBois的书 Using csh & tcsh。这是一本很好的C-Shell参考书。
vktxenjb2#
双引号内的双引号应使用
"\""
转义;用set
设置的变量最好用等号与变量名和内容分开;为了避免大括号的特殊含义,eval
应该用双引号括起来:如果您不想使用
eval
,可以使用别名从FIFO中获取变量:要正确执行多行变量,必须应用
:q
修饰符:不过,使用别名会更好: