我在shell脚本中执行的命令中使用单引号时遇到问题。 在我的脚本中,我执行一个rdesktop命令,该命令应该有-u''(< - 2个单引号)作为参数。 但是,无论我如何试图逃避引号,它都没有正确传递。
如果我只是回显$命令输出正常,如果我执行它就会创建奇怪的输出
这是脚本中不起作用的部分:
command="rdesktop -u "\'\'" $server"
`$command`
我也试过直接执行它:
`rdesktop -u "\'\'" $server`
我很感激任何帮助,因为我阅读了很多关于在shell脚本中转义字符的教程而没有找到解决方案..
编辑:
有趣的是,如果我只是使用
command=rdesktop -u '' $server
并回复它,输出很好 但是,如果我用
执行它$command
它失败了......
答案 0 :(得分:2)
如果您的shell是bash或ksh或zsh,那么使用数组而不是字符串构建命令会更安全,更容易:
command=( rdesktop -u '' $server )
并像这样执行
"${command[@]}"
我无法想象远程服务器需要查看名为字面''
的用户名(即2个单引号) - 它可能只需要一个空字符串。
答案 1 :(得分:0)
首先,如果您输入
`rdesktop something`
然后这意味着调用rdesktop
,获取输出,并将该输出作为命令运行。要“直接执行”,只需输入
rdesktop something
现在报价。如果你执行
rdesktop -u '' $server
然后rdesktop
将看不到引号。它们作为解析命令的shell的一部分被删除。要让rdesktop
看到参数''
,请使用
rdesktop -u "''" $server
没有必要真正添加任何进一步的转义,因为单引号在双引号字符串中并不特殊。
编辑:如果要对变量中的命令执行操作只是为了执行它,请注意这个引号的删除只发生一次:
cmd="rdesktop -u '' $server"
$cmd
答案 2 :(得分:0)
当您调用rdesktop -u '' $server
时,您正在调用带有3个参数的rdesktop,其中第二个是空字符串。我不清楚为什么你试图在反引号中调用它,但你可以使用你的第一个命令定义得到你想要的东西,并且:
eval $command
请注意,如果您未完全控制$server
的内容,则存在很大的安全风险。 (例如,如果server是字符串; cmd
,则调用eval将执行cmd
)