我在shell脚本中执行的命令中使用单引号时遇到了问题。在我的脚本中,我执行了一个rdesktop命令,它的参数应该是-u '‘(<- 2个单引号)。然而,无论我如何尝试转义引号,它都不能正确传递。
如果我只是回显$command,输出是好的,如果我执行它,就会创建奇怪的输出
这是脚本中不起作用的部分:
command="rdesktop -u "\'\'" $server"
`$command`我也尝试过直接执行它:
`rdesktop -u "\'\'" $server`我非常感谢任何人的帮助,因为我读了相当多关于shell脚本中转义字符的教程,但没有找到解决方案。
编辑:
有趣的是,如果我只使用
command=rdesktop -u '' $server并回显它,但是,如果我使用以下命令执行它,则输出是正确的
$command失败了..。
发布于 2012-05-24 18:01:19
如果您的shell是bash、ksh或zsh,则使用数组而不是字符串构建命令会更安全、更容易:
command=( rdesktop -u '' $server )并像这样执行它
"${command[@]}"我无法想象远程服务器需要看到一个名为''的用户名(即两个单引号) --它可能只需要一个空字符串。
发布于 2012-05-24 14:30:11
首先,如果您键入
`rdesktop something`然后,这意味着调用rdesktop,获取输出,并将该输出作为命令运行。要“直接执行它”,只需键入
rdesktop something现在让我们来引用一下。如果您执行
rdesktop -u '' $server则rdesktop将看不到引号。它们将作为解析命令的shell的一部分被删除。要让rdesktop查看参数'',请使用
rdesktop -u "''" $server实际上没有必要添加任何进一步的转义,因为单引号在双引号字符串中并不特殊。
EDIT:当您只想执行变量中的命令时,请注意这种引号剥离只发生一次:
cmd="rdesktop -u '' $server"
$cmd发布于 2012-05-24 17:38:26
当您调用rdesktop -u '' $server时,您将使用3个参数调用rdesktop,其中第二个参数是空字符串。我不清楚为什么你要用反引号来调用它,但你可以使用你的第一个命令定义来获得你想要的:
eval $command请注意,如果您不能完全控制$server的内容,那么这将是一个很大的安全风险。(例如,如果服务器是字符串; cmd,则调用eval将执行cmd)
https://stackoverflow.com/questions/10732082
复制相似问题