如何将命令参数中的引号转义为sh -c?

时间:2016-06-11 00:20:25

标签: shell dash-shell

shell命令cmd可能有空格,单引号和双引号。

如何转义这些引号以将命令正确传递给POSIX shell:

>dash -c ' {CMD {1}}

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

'

然后我们将其转换为

cd "dir"; ls 'foobar'

这很麻烦......有没有更简单的方法?

补充:似乎没有人理解我...我只想要一个通用程序,一个算法,它接受输入,一个字符串(完全精确,由ASCII中0到127之间的可打印ASCII字符组成)表)和输出,第二个字符串。要求是如果第一个字符串像这样执行

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

结果与

相同
POSIX_shell>string1

我现在更清楚了,请告诉我。

1 个答案:

答案 0 :(得分: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\""