我正在使用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;
}
答案 0 :(得分:3)
我猜你发现了一个错误。您报告的行为是发生的事情,快速检查可能的其他特殊字符也会显示以破折号开头的值,例如./prog -arg1 '-fred'
,也不会工作 - 其他符号,例如&#39;&gt;&#39;,&#39;;&#39;和&#39; |&#39;做的。
minimal documentation没有提供此行为的理由。
报告错误在您的代码中,您可以自己处理参数。您可以使用argc
&amp; argv
如果你想使用C风格的字符串进行解析;或NSProcessInfo.processInfo.arguments
会将NSArray
NSString
作为{{1}}给您。
HTH