以<开头的Objective-C命令行参数

时间:2016-03-08 21:42:12

标签: objective-c cocoa command-line-arguments

我正在使用standardUserDefaults解析命令行参数,就像在另一个问题中建议的那样,这在99%的情况下有效,但是当参数以<它失败。

使用:

./prog -arg1 'hello<>asdf

不起作用:

./prog -arg1 '<hello'

当提供的参数以&lt;然后[defaults stringForKey:key]只返回NULL。基本上几乎所有东西似乎都有效,除非它以&lt;我不认为它与bash /转义/管道有任何关系。

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        NSLog(@"arg1: %@", [defaults stringForKey:@"arg1"]);
//        NSLog(@"%@", [defaults dictionaryRepresentation]);
    }
    return 0;
}

1 个答案:

答案 0 :(得分:3)

我猜你发现了一个错误。您报告的行为是发生的事情,快速检查可能的其他特殊字符也会显示以破折号开头的值,例如./prog -arg1 '-fred',也不会工作 - 其他符号,例如&#39;&gt;&#39;,&#39;;&#39;和&#39; |&#39;做的。

minimal documentation没有提供此行为的理由。

http://bugreport.apple.com

报告错误

在您的代码中,您可以自己处理参数。您可以使用argc&amp; argv如果你想使用C风格的字符串进行解析;或NSProcessInfo.processInfo.arguments会将NSArray NSString作为{{1}}给您。

HTH