2016-06-11 45 views
1

shell命令cmd可能包含空格以及单引号和双引号。如何在命令参数中将引号转义为sh -c?

如何逃避这些引号命令正确地传递给了POSIX shell:

>dash -c ' CMD '

另一个问题指出作为DUP,询问双引号。其中一个答案可能会起作用 - 拆分命令并使用连接的引号。例如,如果CMD是

cd "dir"; ls 'foobar' 

那么我们就变换成

>dash -c 'cd "dir"; ls '"'foobar'" 

这是凌乱...有没有更简单的方法?

添加:它似乎没有人理解我...我只是想要一个通用的过程,一个算法,接受输入,一个字符串(完全精确的,由可打印的ASCII字符从0到127 ASCII表),并输出第二个字符串。要求是,如果第一个字符串这样

POSIX_shell>string1 

执行的结果是一样的

>POSIX_shell -c string2 

难道我更清楚现在,请让我知道。

回答

1

首先,尽量避免你提到的杂乱的东西。如果你必须保持简单,单引号内的所有双引号都没有问题。双引号内的所有单引号都不成问题。

#Example: 
echo '"These are double quoted"' 
echo "'These are single quoted'" 

三(混乱和避免这种可能的话),你想要一个单引号内的任何单引号,必须使用多个报价进行转义。

echo ''"'"'These are all single quoted, but messy'"'"'' 

四,双引号内使用双引号应该使用反斜杠\

echo "\"These are double quoted\"" 
+0

的评论:“如果有可能避免这种”让我想起了经典笑话来逃脱“客户电话支持工程师和说,当我这样做时,我遇到了一个错误,支持工程师说,不要那么做!“ –

+0

我不明白你的答案。你确定你明白我的问题吗? –

+1

你可以在单引号内回显'''',除了它是一个fib - 最终结果是单引号,但在''''中,第一个单引号终止单引号字符串,'\''嵌入单引号,最后'''恢复单引号字符串。 –

相关问题