3

我需要在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] 内联的表达式?
我知道我可以@ c = $a * $b在 csh 中做,但这不是内联的。我做了一些谷歌搜索和搜索,但到目前为止没有成功,所以非常感谢任何帮助!

4

3 回答 3

3

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

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

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

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

编辑我看到我输错了$( $a * $b ),请参阅上面的内联更正。

IHTH。

于 2012-10-16T21:16:30.237 回答
2

不使用外壳之外的东西,不。

旧学校 shell 脚本中数学的常见罪魁祸首是expr

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

但是,如果这与et al一样严格,那么您就不走运了。时期。bc

于 2012-10-16T21:12:23.223 回答
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 不是一个选项。)

于 2012-10-16T23:24:20.310 回答