Linux 쉘에서 변수로 나누는 방법은 무엇입니까?
아래와 같이 쉘에서 명령을 실행하면 expr: non-integer argument
오류가 반환 됩니다. 누군가 나에게 이것을 설명해 주시겠습니까?
$ x=20
$ y=5
$ expr x / y
expr: non-integer argument
이러한 변수는 쉘 변수입니다. 이를 다른 프로그램 ( 예 :)에 대한 매개 변수로 확장하려면 접 두부 expr
를 사용해야합니다 $
.
expr $x / $y
그것이 불평하는 이유는 당신이 알파벳 문자 ( 즉 , 정수가 아닌) 를 조작하려고한다고 생각했기 때문입니다.
Bash 쉘을 사용하는 경우 표현식 구문을 사용하여 동일한 결과를 얻을 수 있습니다.
echo $((x / y))
또는:
z=$((x / y))
echo $z
나는 그것이 다른 스레드에서 이미 언급되었다고 생각합니다.
calc(){ awk "BEGIN { print "$*" }"; }
다음을 입력하면됩니다.
calc 7.5/3.2
2.34375
귀하의 경우에는 다음과 같습니다.
x=20; y=3;
calc $x/$y
또는 원하는 경우이 스크립트를 별도의 스크립트로 추가하고 $ PATH에서 사용 가능하게하여 항상 로컬 셸에 포함 시키십시오.
#!/bin/bash
calc(){ awk "BEGIN { print $* }"; }
let을 사용하지 않는 이유; 훨씬 쉬워요. 다음은 유용한 예입니다.
start=`date +%s`
# ... do something that takes a while ...
sleep 71
end=`date +%s`
let deltatime=end-start
let hours=deltatime/3600
let minutes=(deltatime/60)%60
let seconds=deltatime%60
printf "Time spent: %d:%02d:%02d\n" $hours $minutes $seconds
Bash 변수를 참조하려면 매개 변수 확장이 필요합니다
대부분의 Linux 배포에서 기본 셸은 Bash입니다. Bash에서 변수는 매개 변수 확장을 위해 달러 부호 접 두부를 사용해야합니다 . 예를 들면 다음과 같습니다.
x=20
y=5
expr $x / $y
물론, Bash에는 산술 연산자 와 특수한 산술 확장 구문 도 있으므로 별도의 프로세스로 expr 바이너리 를 호출 할 필요가 없습니다 . 쉘이 다음과 같이 모든 작업을 수행하도록 할 수 있습니다.
x=20; y=5
echo $((x / y))
가정하자
x=50
y=5
그때
z=$((x/y))
이것은 제대로 작동합니다. 그러나 case 문에서 / 연산자를 사용하여 해결할 수없는 경우. 이 경우 div 또는 devide와 같은 간단한 문자열을 사용하십시오. 코드를 참조하십시오
다음과 같이 명령 대체를 사용할 수 있습니다.
z="$(expr $x / $y)"
echo "$z"
위에서 언급 한대로 공백을 확인하십시오
참고 : https://stackoverflow.com/questions/18093871/how-can-i-do-division-with-variables-in-a-linux-shell
'Programming' 카테고리의 다른 글
django의 urls.py에서 직접 명명 된 URL 패턴으로 리디렉션 하시겠습니까? (0) | 2020.07.15 |
---|---|
bash에서 특수 변수를 수동으로 확장하는 방법 (예 : ~ 물결표) (0) | 2020.07.15 |
특정 유형의 모든 이벤트 리스너 제거 (0) | 2020.07.15 |
Google Colaboratory로 데이터 가져 오기 (0) | 2020.07.15 |
Hadoop에서 여러 MapReduce 작업 연결 (0) | 2020.07.14 |