Прямого перевода нет: fish использует элементы, разделенные запятыми, внутри фигурных скобок - https://fishshell.com/docs/current/index.html#expand-brace
Вы также не можете сделать for i in /dev/sd[b-g]
, потому что рыба не использует наборы символов в качестве подстановочных знаков при глобализации - https://fishshell.com/docs/current/index.html#expand-wildcard
Вы заканчиваете тем, что вызываете какую-то внешнюю программу для генерации этого списка файлов, и вы знаете, что bash работает, поэтому:
for i in (bash -c 'printf "%s\n" /dev/sd{b..g}'); ...
Это пример одного из принципов дизайна fish [ 114]:
Все, что можно сделать на других языках оболочки, должно быть возможно в рыбе, хотя при этом рыба может полагаться на внешние команды.
BLOCKQUOTE>
Несколько неэффективный способ сделать это:
NSString *s = @"foo/bar:baz.foo";
NSCharacterSet *doNotWant = [NSCharacterSet characterSetWithCharactersInString:@"/:."];
s = [[s componentsSeparatedByCharactersInSet: doNotWant] componentsJoinedByString: @""];
NSLog(@"%@", s); // => foobarbazfoo
Посмотрите на NSScanner
и -[NSString rangeOfCharacterFromSet: ...]
если Вы хотите сделать это немного более эффективно.
Бывают ситуации, когда ваш метод достаточно хорош, я думаю, Мэтт .. Кстати, я думаю, что лучше использовать
[strNew setString: [strNew stringByReplacingOccurrencesOfString:@":" withString:@""]];
, а не
strNew = [strNew stringByReplacingOccurrencesOfString:@"/" withString:@""];
, поскольку я думаю, вы перезаписываете указатель NSMutableString с NSString, который может вызвать утечку памяти.
+ (NSString*) decodeHtmlUnicodeCharactersToString:(NSString*)str
{
NSMutableString* string = [[NSMutableString alloc] initWithString:str]; // #&39; replace with '
NSString* unicodeStr = nil;
NSString* replaceStr = nil;
int counter = -1;
for(int i = 0; i < [string length]; ++i)
{
unichar char1 = [string characterAtIndex:i];
for (int k = i + 1; k < [string length] - 1; ++k)
{
unichar char2 = [string characterAtIndex:k];
if (char1 == '&' && char2 == '#' )
{
++counter;
unicodeStr = [string substringWithRange:NSMakeRange(i + 2 , 2)]; // read integer value i.e, 39
replaceStr = [string substringWithRange:NSMakeRange (i, 5)]; // #&39;
[string replaceCharactersInRange: [string rangeOfString:replaceStr] withString:[NSString stringWithFormat:@"%c",[unicodeStr intValue]]];
break;
}
}
}
[string autorelease];
if (counter > 1)
return [self decodeHtmlUnicodeCharactersToString:string];
else
return string;
}