X ++ увеличит значение, но тогда возвратит его старое значение.
Так в этом случае:
static void Main(string[] args)
{
int x = 10;
x = x++;
Console.WriteLine(x);
}
Вы имеете X в 11 просто на мгновение, тогда это возвращается к 10, потому что 10 возвращаемое значение (x ++).
Вы могли вместо этого сделать это для того же результата:
static int plusplus(ref int x)
{
int xOld = x;
x++;
return xOld;
}
static void Main(string[] args)
{
int x = 10;
x = plusplus(x);
Console.WriteLine(x);
}
также стоит упомянуть, что у Вас был бы свой ожидаемый результат 11, если Вы сделаете:
static void Main(string[] args)
{
int x = 10;
x = ++x;
Console.WriteLine(x);
}
Лучшее решение: не пытайтесь анализировать вывод ls в первую очередь.
Официальная вики-страница irc.freenode.org канала #bash дает объяснение, почему это Плохая идея, и какие альтернативные подходы вы можете использовать вместо этого: http://mywiki.wooledge.org/ParsingLs
Использование find, stat и подобных инструментов предоставит вам функциональность » мы ищем без подводных камней (не все из которых очевидны - некоторые возникают только при переходе на платформы с другими реализациями ls).
Для вашего конкретного примера, я предполагаю, что вы пытаетесь найти только файлы ( а не каталоги) в вашем текущем каталоге; Ваша текущая реализация с использованием ls -l
содержит ошибки, поскольку исключает файлы с разрешениями + t или setuid. Правильный способ реализации этого был бы следующим:
find . -maxdepth 1 -type f -printf '%f\n'
Просто для завершение. Это также можно сделать с помощью sed:
# just an exercise in regex matching ...
ls -l | sed -E -e '1d; s/^([^ ]+ +){8}//'
echo 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 |
awk 'BEGIN {OFS=ORS=""} ; {for (i=9;i<NF;i++) print $i " "; print $NF "\n"}'
Если вы по-прежнему настаиваете на ls -l вместо find или других инструментов, вот мое решение. Это некрасиво и деструктивно:
ls -l | awk '{for (i = 1; i < 9; i++) $i = ""; sub(/^ */, ""); print}'
Возможно, есть лучший подход, который включает в себя как-то объединение полей, но:
$ echo 1 2 3 4 5 6 7 8 9 10 11 12 13 14... | awk '{for (i = 9 ; i <= NF ; i++) printf "%s ", $i}' 9 10 11 12 13 14...
Использование printf "% s" $ i
напечатает i-е поле с пробелом после него вместо новой строки. Цикл for просто говорит перейти от поля 9 к последнему полю.