首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >shell脚本: execute中的单引号

shell脚本: execute中的单引号
EN

Stack Overflow用户
提问于 2012-05-24 14:13:01
回答 3查看 5.2K关注 0票数 2

我在shell脚本中执行的命令中使用单引号时遇到了问题。在我的脚本中,我执行了一个rdesktop命令,它的参数应该是-u '‘(<- 2个单引号)。然而,无论我如何尝试转义引号,它都不能正确传递。

如果我只是回显$command,输出是好的,如果我执行它,就会创建奇怪的输出

这是脚本中不起作用的部分:

代码语言:javascript
复制
command="rdesktop -u "\'\'" $server"
`$command`

我也尝试过直接执行它:

代码语言:javascript
复制
`rdesktop -u "\'\'" $server`

我非常感谢任何人的帮助,因为我读了相当多关于shell脚本中转义字符的教程,但没有找到解决方案。

编辑:

有趣的是,如果我只使用

代码语言:javascript
复制
command=rdesktop -u '' $server

并回显它,但是,如果我使用以下命令执行它,则输出是正确的

代码语言:javascript
复制
$command

失败了..。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-24 18:01:19

如果您的shell是bash、ksh或zsh,则使用数组而不是字符串构建命令会更安全、更容易:

代码语言:javascript
复制
command=( rdesktop -u '' $server )

并像这样执行它

代码语言:javascript
复制
"${command[@]}"

我无法想象远程服务器需要看到一个名为''的用户名(即两个单引号) --它可能只需要一个空字符串。

票数 2
EN

Stack Overflow用户

发布于 2012-05-24 14:30:11

首先,如果您键入

代码语言:javascript
复制
`rdesktop something`

然后,这意味着调用rdesktop,获取输出,并将该输出作为命令运行。要“直接执行它”,只需键入

代码语言:javascript
复制
rdesktop something

现在让我们来引用一下。如果您执行

代码语言:javascript
复制
rdesktop -u '' $server

rdesktop将看不到引号。它们将作为解析命令的shell的一部分被删除。要让rdesktop查看参数'',请使用

代码语言:javascript
复制
rdesktop -u "''" $server

实际上没有必要添加任何进一步的转义,因为单引号在双引号字符串中并不特殊。

EDIT:当您只想执行变量中的命令时,请注意这种引号剥离只发生一次:

代码语言:javascript
复制
cmd="rdesktop -u '' $server"
$cmd
票数 0
EN

Stack Overflow用户

发布于 2012-05-24 17:38:26

当您调用rdesktop -u '' $server时,您将使用3个参数调用rdesktop,其中第二个参数是空字符串。我不清楚为什么你要用反引号来调用它,但你可以使用你的第一个命令定义来获得你想要的:

代码语言:javascript
复制
eval $command

请注意,如果您不能完全控制$server的内容,那么这将是一个很大的安全风险。(例如,如果服务器是字符串; cmd,则调用eval将执行cmd)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10732082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档