2012-10-16 2 views
3

일부 정수 계산을 수행하려면 csh이 필요합니다 (아니요, 다른 쉘은 옵션이 아니며 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 

다음 질문은 $[$a*$b]인라인을 계산 CSH의 표현이 있습니까 같을 것이다?
나는 csh에서 @ c = $a * $b을 할 수 있음을 알고 있지만 인라인이 아닙니다. 나는 약간의 인터넷 검색 및 검색을 수행했으나 지금까지 성공하지 못 했으므로 어떤 도움도 대단히 감사하겠습니다!

답변

3

대괄호를 사용하면 배열 표기법이나 행렬 계산을 나타냅니다. csh에는 그러한 내장 기능이 없습니다. 당신이 bash는 $(($a * $b)) 같은 의미하는 경우 ELSE

, 당신은 당신에게 당신의 목표는 별도의 프로세스를 산란을 방지하기 위해 인 경우,이 목표를 충족하지 않습니다

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

주를 제공하는 역 인용 부호와 CSH cmd를-대체를 사용할 수 있습니다 하지만 "인라인"

편집 내가 $($a * $b)로 잘못 입력 참조입니다, 위의 인라인 보정을 참조하십시오.

IHTH.

+0

대괄호 구문은 리터럴 bash 산술 대체입니다. '$ ['...']'는'$ (('...'))'와 동일합니다. 그것은 연산 식을 계산하지만, 달러가없는 버전과는 달리 결과로 대체됩니다 :'let a = 3 b = 2; echo $ ((a * b))' –

+0

'$ ((...))'을 알고 있고 ksh에서 항상 사용하고 있습니다. '$ [..]'에 대해 몰랐습니다. 공유해 주셔서 감사합니다. – shellter

+0

그래, 나는 bash에서'$ [...]'에 대해 알고 있었고 csh에서 정확히 같은 기능을 가진 것이 있는지 궁금해했다.'expr'에 대해서 몰랐다. – alexey

1

껍질 외부의 것을 사용하지 않고, 아니요.

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

하지만 그건 경우 단지 bc으로 금지 사항 로 등, 당신은 운이있어 :

오래된 학교 쉘 스크립트에서 수학에 대한 일반적인 원인은 expr입니다. 기간.

+0

글쎄,'expr'이없는 것보다는 낫다, 나는 당신이 옳은 것하지만,뿐만 아니라 사용할 수 있습니다, 그것을 시도 할 것이다 bc then ... – alexey

1

네,하지만 꽤 아니다 : 이것은 당신이 그 이름의 변수가 일어날 경우 $tmp을 소지품, 그래서 고유 한 이름을 선택합니다

% 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 

하는 것으로.

(I는 BC, 펄, 파이썬이 옵션을 선택하지 왜 궁금하지만.)

+0

글쎄요, 그 이유는 csh에 bash의'$ [...]'또는'$ ((...))와 동등한 것이 있는지 궁금해하고 있었기 때문입니다. 나는 내가 방금 그것을 물을 수 있었다고 생각한다. 그러나 내가 줬던 예는 더 정확하게 보였다. 답변 주셔서 감사합니다! – alexey