如何将命令参数中的引号转义到 sh -c? [复制]

Posted

技术标签:

【中文标题】如何将命令参数中的引号转义到 sh -c? [复制]【英文标题】:how to escape quotes in command argument to sh -c? [duplicate] 【发布时间】:2016-10-12 01:02:30 【问题描述】:

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

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

>dash -c 'cmd'

另一个问题指向一个重复,询问双引号。那里的答案之一可能会起作用 - 拆分命令并使用连接引号。例如,如果 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\""

【讨论】:

评论“尽可能避免这种情况”让我想起了经典笑话“客户致电支持工程师并说,我这样做时出错,支持工程师说,那就不要这样做! " 我不明白你的回答。你确定你明白我的问题吗? 你可以echo 'A single quote '\'' inside a single quote.',除了它是一个fib——最终结果是一个单引号,但是在'\''中,第一个单引号终止了单引号字符串\'嵌入单引号,最后的 ' 恢复单引号字符串。 @JonathanLeffler 我不知道为什么,我试图把我的问题说清楚,但显然我没有成功,因为似乎没有人理解它,但我不知道如何使它更清除。我会尝试在问题中添加更多文字。 @MarkGaleck:副本的答案包括单引号和双引号,所以我认为它是一个不错的副本——我在使用 Mjölnir 将其作为副本关闭之前确实检查了它。有很多方法可以做到这一点;它们都很杂乱,你可以选择哪种杂乱方式在你眼中最不杂乱。

以上是关于如何将命令参数中的引号转义到 sh -c? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何转义 php mysqli 查询? [复制]

如何在使用转义或引号在pyspark中的文件中写入数据帧时获得完全匹配? [复制]

在这种情况下如何转义单引号? [复制]

如何以编程方式转义引号? [复制]

如何在 shell 脚本中将带引号的参数添加到带引号的命令中? [复制]

如何阻止我的命令行参数在 Maven 插件中被转义?