csh内联数学

时间:2012-10-16 20:36:37

标签: linux shell csh

我需要在 csh 中做一些整数数学运算(不,其他shell不是一个选项,也不是bc,也不是perl,也不是python,句点)。

bash 中,我的任务看起来像

seq 1 1 10 > m.txt  #supplied from elsewhere
a=2                 #supplied from elsewhere
b=3                 #supplied from elsewhere
head -n $[$a*$b] m.txt # the line in question

然后问题是 csh中是否有一个表达式计算 $[$a*$b] 内联?
我知道我可以在csh中执行@ c = $a * $b,但这不是内联的。我做了一些谷歌搜索和搜索,但到目前为止没有成功,所以任何帮助非常感谢!

3 个答案:

答案 0 :(得分:3)

您使用方括号是否表示数组符号或矩阵数学? csh没有这样的内置功能。

ELSE,如果你的意思是像bash $(($a * $b)),你可以使用带反引号的csh cmd-substitution来给你

head -n `expr $a \* $b` m.txt

请注意,如果您的目标是避免产生额外的流程,这不符合您的目标,但它是“在线”

修改我发现我输入错误为$( $a * $b ),请参阅上面的内联修正。

IHTH。

答案 1 :(得分:2)

不使用shell之外的东西,没有。

旧学校shell脚本中常见的数学元素是expr

head -n `expr $a \* $b` m.txt

但如果那就像 verboten 那样bc et al ,那么你就不走运了。周期。

答案 2 :(得分:1)

是的,但它并不漂亮:

% seq 1 1 10 > m.txt
% set a = 2
% set b = 3
% head -n `@ tmp = $a * $b ; echo $tmp ; unset tmp` m.txt
1
2
3
4
5
6

请注意,如果您碰巧有该名称的变量,这将会破坏$tmp,因此请选择一个唯一的名称。

(虽然我想知道为什么不能选择bc,perl和python。)