如何将命令参数中的引号转义到 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? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何在使用转义或引号在pyspark中的文件中写入数据帧时获得完全匹配? [复制]