当我将值传递为$ start&时,我无法运行以下命令$ end但是当我直接给出日期值时它会成功运行。还有其他运行命令的方法吗? 注意:我正在使用phpseclib并能够成功登录并执行基本命令。
$起始值是“2015-07-27 18:48:56” $ end value是“2015-07-27 18:49:00”
{{1}}
答案 0 :(得分:3)
简短的回答是你不能嵌套双引号和单引号字符串,这似乎是你在这里尝试做的,并期望结果是PHP将你的变量扩展到字符串中。一旦字符串语法以单引号开头,字符串内的字符就不会被扩展(重新评估),这与双引号不同。因此,单引号字符串中的双引号仍然只是一个双字引号。
而是使用echo $ssh->exec("/tpo/umc/bin/cmu_monitoring_dump -n r02bv01 -m cpunumber -t0 $start -t1 $end -f line> /tmp/adwant.txt");
在PHP中有4 main syntax for strings(自PHP 5.3以来,无论如何)。
Heredoc和Nowdoc语法将分别产生与双引号和单引号字符串相同的净结果。
单引号和双引号字符串之间的唯一区别是单引号字符串不提供string interpolation并且只有一个转义序列字符(单引号本身)。也就是说,当你创建一个像'some $string here'
这样的字符串时,它将成为开始和结束单引号之间每个字符的字符串文字,没有其他字符可以在字符串中展开。同样的事情也适用于 Nowdoc 字符串语法。
现在,假设您需要字符串中的文字双引号,则需要转义具有反斜杠\
转义字符的字符。请参阅手册中的escaping double quote strings。
您还应该注意,在PHP的字符串解析之外,双引号和单引号之间的某些shell也存在差异,并且这些shell也可能具有不同的转义序列字符(有关更多信息,请参阅escapeshellarg详情)。