Вы могли использовать bc
. Например,
$ echo "25 + 5" | bc
30
Кроме того, bc <<< 25+5
будет также работать.
Или в интерактивном режиме, если Вы хотите сделать больше, чем просто единственное простое вычисление:
$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
25 + 5
30
Реализация GNU bc
печать, что информация о заголовке/авторском праве о запуске, когда и его stdin и stdout переходят к терминалу. Можно подавить его с (определенный для GNU) -q
опция. Для получения дополнительной информации см. до н.э страницу справочника
Проблема состоит в том, что Ваши переменные расширяются ударом, прежде чем находка будет выполнена. Из-за этого $a
расширен до 0, $$
расширен до PID Вашего (вход в систему) оболочка, таким образом, команда, которая выполняется bash -xc
на самом деле:
echo 0 {} ;((a++)) ; echo 0 1314
Здесь {}
заменяется xargs с результатом find
и значение $a
постувеличен, но никогда не печатается. Попытайтесь выйти из переменных (как в \$a
), или еще лучше, помещение bash -xc
аргументы в одинарных кавычках ('
) вместо двойных кавычек ("
) видеть, что это работает.
Вы также заметите, что другие комментаторы корректны, xargs -n1
(или с -I{}
) выполняет новую оболочку для каждого аргумента, поэтому увеличивая $a
не будет работать - увеличенное значение не будет видимо к следующему вызову bash -xc
команда.