Linux 内联数学

Linux 内联数学,linux,shell,csh,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中做一些整数运算(不,其他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
,但那不是内联的。我做了一点谷歌搜索,但到目前为止没有成功,所以非常感谢任何帮助

不使用外壳外的东西,不

旧式shell脚本中的数学罪魁祸首通常是
expr

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

但是,如果这和卑诗省等等一样荒谬,那么你就不走运了。句号。

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

否则,如果您的意思是像bash
$($a*$b))
,您可以使用csh cmd替换和反引号来提供

head -n `expr $a \* $b` m.txt
请注意,如果您的目标是避免产生额外的进程,那么这并不能满足您的目标,但它是“串联的”

编辑我发现我输入错误为
$($a*$b)
,请参见上面的内联更正


IHTH.

是的,但它并不漂亮:

% 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不是一个选项。)

方括号语法是文字bash算术替换
$[
..
]
$(
..
相同;它计算一个算术表达式,但与无单元版本不同,它被结果替换:
let a=3 b=2;echo$((a*b))
我知道,
$(…)
并在ksh中一直使用它。不知道有关
$[…]
的信息。谢谢分享。是的,我知道bash中的
$[…]
,只是想知道csh中是否有完全相同的功能,但不知道
expr
,我会尝试感谢您的回答!嗯,原因是我想知道csh是否有与bash的
$[…]
$(…)
相等的东西。我想我可以问这个问题,但我举的例子似乎更准确。谢谢你的回答!嗯,
expr
总比什么都没有好,我会试试看,虽然你是对的,但还是用bc吧。。。