Linux 内联数学
我需要在csh中做一些整数运算(不,其他shell不是选项,bc、perl和python都不是句号) 在bash中,我的任务如下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
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吧。。。