2012-10-16 25 views
3

我需要做一些整數數學csh(並且不,其他shell不是選項,也不是bc,也不是perl,也不是python,句點)。csh內嵌數學

慶典我的任務看起來像

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,但這不是內聯的。我做了一些Google搜索和搜索,但迄今爲止沒有成功,所以任何幫助都非常感謝!

回答

3

您是否使用方括號來表示數組符號或矩陣運算? csh沒有這樣的內置功能。

ELSE,如果你的意思是一樣的bash $(($a * $b)),您可以使用CSH CMD-替代與反引號給你

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

需要注意的是,如果你的目標是避免生成額外的過程,這不符合你的目標,但它是「在線」

編輯我看我錯誤輸入爲$($a * $b),請參閱上面的內聯更正。 IHD。

IHTH。

+0

方括號語法是文字bash算術替換。 '$ ['...']'和$((''''))''是一樣的;它計算一個算術表達式,但不像無代價版本,它被結果取代:'let a = 3 b = 2; echo $((a * b))' –

+0

我知道'$((...))'並且一直以ksh使用它。不知道'$ [..]'。感謝分享。 – shellter

+0

是的,我知道bash中有'$ [...]',只是想知道csh中是否有完全相同的功能,並且不知道'expr',會嘗試並感謝您的回答! – alexey

1

不使用shell以外的東西,沒有。

通常的罪魁禍首從舊學校shell腳本數學expr

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

,但如果這只是作爲禁止的作爲bc,那麼你的運氣了。期。

+0

好,'expr'總比沒有好,我會盡力,雖然你是對的,還不如用bc然後... – alexey

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是不是一種選擇。)

+0

那麼,原因是我只是想知道csh是否具有與bash的'$ [...]'或'$((...))'等價的東西。我想我可以問這個問題,但我給出的例子似乎更加精確。謝謝您的回答! – alexey