ls -R
помещает некоторые дополнительные пустые строки в вывод, который заставляет количество увеличиваться.
Можно протестировать его путем выполнения команды ls -R
не передавая его по каналу к wc -l
Вы действительно хотите сделать это в tcsh только? Csh и его производная tcsh имеют много таких причуд. Вы более обеспечены с другой оболочкой как удар и т.д.
В данном случае кажется, что добавление пары круглой скобки угождает tcsh. Это также документируется в tcsh руководство:
expr может содержать операторы
*
,+
, и т.д., как в C. Если expr содержит<
,>
,&
или|
затем, по крайней мере, та часть expr должна быть помещена в()
.
mint13:~> echo $version
tcsh 6.17.06 (Astron) 2011-04-15 (x86_64-unknown-linux) options wide,nls,dl,al,kan,rh,nd,color,filec
mint13:~> @ y = 1001; @ z = 0110;
mint13:~> @ x = $y|$z
110: Command not found.
mint13:~> @ x = ($y|$z)
mint13:~> echo $x
1007
Вы могли бы уже знать, это — tcsh читает 1001 и 0110 как десятичные числа. Я не знаю, как заставить его понять двоичные числа.
Я не знаю, как объявлять двоичные числа; но ваш синтаксис неверен.
У '@' был собственный анализатор выражений, и каким-то образом он путался с основным анализатором, если выражение не заключено в скобки. Согласно справочной странице -, в некоторых случаях требуются пробелы, включающие побитовые операторы. Я предлагаю использовать пробелы везде, так как там было много ошибок.
Это будет работать гладко:
@ y = 1001; @ z = 0110;
@ x = ( $y | $z ); echo $x
Обратите внимание, что, как и в C, числа, начинающиеся с 0, являются восьмеричными, поэтому значение $z равно 72 в десятичном виде.
Восьмеричные и шестнадцатеричные числа используются потому, что они точно представляют двоичные числа. Восьмеричная цифра представляет 3 двоичных цифры.
binary <--> octal
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7
Если значения y и z, которые вы записали, представлены в двоичном формате, это правильная форма (с использованием восьмеричных чисел)
@ y = 011; @z = 006;
@ x = ( $y | $z ); echo $x
15
Существует еще одно решение: используйте любую команду -строкового калькулятора, которую вы хотите, используя выражение в обратных -кавычках. Я предлагаю попробоватьcalc , bc или awk с этим порядком.
Пример с вычислением:
set x = `calc '0b1001 | 0b110'`; echo $x
15
15 (дес )= 017 (окт )= 0xF (шестн )= 0b1111 (бин)