인수를 정수로 변환하여 산술 연산을 수행한 다음 인쇄하는 방법을 알아내려고 합니다. 예를 들면 다음과 같습니다 addOne.sh
.
echo $1 + 1
>>sh addOne.sh 1
prints 1 + 1
답변1
Bash에서는 "산술을 수행하기 위해 인수를 정수로 변환"하지 않습니다. Bash에서 변수는 상황에 따라 정수 또는 문자열로 처리됩니다.
(정수 컨텍스트에서 변수를 사용하는 경우 변수에는 유효한 정수처럼 보이는 문자열이 포함되어 있어야 합니다. 그렇지 않으면 오류가 발생합니다.)
산술 연산을 수행하려면 산술 스프레드 연산자를 호출해야 합니다 $((...))
. 예를 들어:
$ a=2
$ echo "$a + 1"
2 + 1
$ echo "$(($a + 1))"
3
또는 일반적으로 선호됩니다:
$ echo "$((a + 1))"
3
bash(ksh93, zsh 또는 yash와 반대)는 다음 작업만 수행한다는 점을 알아야 합니다.정수산수. 부동 소수점 숫자(소수가 있는 숫자)가 있는 경우 도움이 될 수 있는 다른 도구가 있습니다. 예를 들어 다음을 사용합니다 bc
.
$ b=3.14
$ echo "$(($b + 1))"
bash: 3.14 + 1: syntax error: invalid arithmetic operator (error token is ".14 + 1")
$ echo "$b + 1" | bc -l
4.14
또는 bash 대신 부동 소수점 연산을 지원하는 셸을 사용할 수 있습니다.
zsh> echo $((3.14 + 1))
4.14
답변2
다른 방법으로 사용할 수 있습니다.expr
전임자:
$ version="0002"
$ expr $version + 0
2
$ expr $version + 1
3
답변3
bash
다음을 사용하여 임의의 값을 정수로 변환할 수 있습니다 .printf -v:
printf -v int '%d\n' "$1" 2>/dev/null
부동 소수점 숫자는 정수로 변환되고 숫자처럼 보이지 않는 숫자는 0으로 변환됩니다. 지수는 이전 숫자로 잘립니다.e
예:
$ printf -v int '%d\n' 123.123 2>/dev/null
$ printf '%d\n' "$int"
123
$ printf -v int '%d\n' abc 2>/dev/null
$ printf '%d\n' "$int"
0
$ printf -v int '%d\n' 1e10 2>/dev/null
$ printf '%d\n' "$int"
1
답변4
~에 따르면배쉬 문서, 산술 표현식을 평가하는 구문은 입니다 $((expression))
. 예를 들어:
$ n=1
$ echo $((n+1))
2
변수에 인수를 할당한 다음 산술 확장을 사용하여 스크립트에서 이를 사용할 수 있습니다.
n=$1
echo $((n+1))
테스트를 받아보세요:
$ bash ./test.sh 1
2
$ bash ./test.sh 7
8