【发布时间】:2012-11-08 23:36:44
【问题描述】:
我正在寻找与 Windows 的CommandLineToArgvW 等效的功能。
我有一个字符串,我想完全按照 bash 的方式分解它,包括所有极端情况 - 即考虑单引号和双引号、反斜杠等,所以拆分a b "c'd" "\"e\"f" "g\\" h 'i"j' 会导致:
a
b
c'd
"e"f
g\
h
i"j
由于这样的函数已经存在并且被 OS/bash 使用,我假设有一种方法可以调用它,或者至少可以获得它的源代码,所以我不需要重新发明轮子。
编辑
要回答我为什么需要它,它与产生子进程无关。我想制作一个搜索文本的程序,以任何顺序观察多个正则表达式是否为真。但是所有的正则表达式都会在同一个文本字段中输入,所以我需要将它们分解。
【问题讨论】:
-
我的第一个想法是:你需要吗?你用这个干什么?
-
我正在尝试制作一个文本搜索程序,您可以在其中在同一字段中输入多个正则表达式。不是在单独的框中输入它们,而是一次输入,但它们是根据这些规则分解的。由于反斜杠和特殊字符在正则表达式中很重要,因此我需要将它们考虑在内。
-
这可能不是处理多个正则表达式的最佳方式,因为正则表达式通常包含空格和引号。我会对用 shell 引用规则解析的正则表达式感到困惑。也许您可以像许多语言一样用斜线分隔它们,例如
/foo bar.*/ /baz*/. -
是的,但最常见的(如 99%)正则表达式实际上是由空格分隔的纯单词。正则表达式只是一个非常高级的选项。对于最常见的情况,只键入以空格分隔的单词会更自然。
-
@satuon 你可能不希望它表现得“完全像 bash”,因为 bash 以一种相当令人惊讶的方式做到了(例如,你不能在单引号内使用反斜杠来引用单引号)。您说这样的函数已经存在,但正如我所提到的,Bash 实现的功能不仅仅是字符串拆分。您可能只想自己实现解析器。
标签: c linux command-line-arguments