将NSString拆分为多个命令行参数

时间:2018-10-05 11:14:54

标签: objective-c cocoa

我在应用程序中获取了命令行字符串,并且试图与NSTask一样运行。我可以将其转换为C-String并使用系统运行它。

system([commandlineStr cStringUsingEncoding:NSUTF8StringEncoding]);

但是我更喜欢使用NSTask。为了以NSTask身份运行,我需要将字符串作为命令和参数数组拆分。用 space 分隔符不起作用,因为之间可能有参数,且之间有空格。目前,它们要么被转义要么被引用。例如:

cp "~/File with spaces" ~/Folder\ with\ spaces

是否有一种内置的方法可以将字符串拆分为多个参数或为该参数编写自定义解析逻辑。

1 个答案:

答案 0 :(得分:1)

您要解析的格式是shell命令行,有一个相当擅长的程序-shell。如果您确实选择自己解析,则您的工作将无法完成-您仍然必须找到要运行的程序。 Shell通过采用示例中的命令名cp并使用一组路径搜索匹配的程序来完成此操作。要复制此内容,您必须执行相同的搜索。

有一种更简单的方法,shell本身就是可以使用NSTask调用的程序,并且shell具有选项-c,该选项将单个字符串作为参数并进行解析和执行。该字符串值作为命令行。因此,您可以使用NSTask,将第一个参数传递为@"-c",第二个参数传递为您拥有的字符串。这将为您处理所有内容-空格,转义符,管道,重定向,

HTH