Это работает, если вы заключаете в кавычки в своем аргументе:
./myapp -address '"[2001::abc]"'
Для параметров командной строки -<key> <value>
значение интерпретируется как список свойств старого стиля (NextStep-era), не только в виде дословной строки.
Это означает, что, например, можно передавать массивы и словари. Если вы измените свой код, чтобы использовать objectForKey:
вместо stringForKey:
, он получит массив из этого:
./myapp -address '("[2001::abc]")'
Или словарь из этого:
./myapp -address '{address="[2001::abc]";}'
Поскольку различные символы могут быть «специальными» при интерпретации этого формата, строки должны заключаться в кавычки, если в них есть какие-либо символы за пределами ограниченного набора. Очевидно, левая квадратная скобка является таким символом.
Если вам нужно выяснить синтаксис, используемый для данного аргумента, вы можете написать простую программу, которая создает массив с нужным объектом списка свойств, и зарегистрируйте этот массив. Очевидно, что результат будет включать круглые скобки для форматирования массива, но объект в массиве также будет отформатирован по мере необходимости для этого формата старого стиля. (Если вы не обернули объект в коллекцию как массив, он мог бы просто записать себя дословно, как при записи NSString
.)