정확히 차이점이 무엇인지 알고 싶습니다.
a=$[1+1]
a=$((1+1))
let a=1+1
a=$(expr 1 + 1 )
4는 모두 변수 a에 2를 할당하지만 차이점은 무엇입니까?
내가 지금까지 알아 낸 것에서 expr은 실제 쉘 내장이 아니기 때문에 expr이 느리다는 것입니다. 그러나 그 이상은 없습니다.
답변
이 모든 것은 산술을 다루지 만 다른 방식으로 변수는 다른 수단을 통해 만들어집니다. 이 중 일부는 bash
껍질 에만 해당되는 반면 다른 것은 그렇지 않습니다.
$((...))
를 산술 확장 이라고 하며 이는 쉘bash
및ksh
쉘의 전형입니다 . 이것은 간단한 정수 산술을 할 수 있지만 부동 소수점은 없습니다. 에서이 같은 식의 결과는, 표현을 대체echo $((1+1))
될 것입니다echo 2
((...))
산술 평가 라고 하며 일부if ((...)); then
또는while ((...)) ; do
명령문 으로 사용할 수 있습니다 . 산술 확장 확장은 연산$((..))
의 출력을 대체하며 변수를 할당하는 데 사용할i=$((i+1))
수 있지만 조건문에는 사용할 수 없습니다.$[...]
더 이상 사용되지 않는 산술 확장에 대한 이전 구문입니다. 도 참조하십시오 . 이것은 오래된bash
스크립트가 깨지지 않도록 유지되었을 것 입니다. 이것은에서 작동하지 않았ksh93
으므로이 구문은 bash에만 해당됩니다. 참고 : 공백은 여기서 매우 중요합니다.$[1+1]
와 같은 것들을 혼동하지 마십시오[ $a -eq $b ]
.[
공백은로 알려져test
명령, 당신은 일반적으로 의사 결정 부분을 참조하십시오. 그것은 행동과 목적이 매우 다릅니다.let
간단한 산술 평가로 변수를 만들 수 있는bash
및ksh
키워드입니다. 문자열을 할당하려고let a="hello world"
하면 구문 오류가 발생합니다. 에서 작동bash
하고ksh93
.$(...)
문자 그대로 명령의 출력을 가져 와서 변수에 할당하는 명령 대체입니다. 여기에서 귀하의 명령은expr
과 같은 위치 인수를 취expr arg1 arg2 arg3
하므로 공백이 중요합니다. 정수 산술을위한 작은 명령 줄 계산기와 더불어 사실 / 거짓 및 정규 표현식 유형과 비슷합니다. 이것은 쉘 중립 명령입니다.
또한 연산 확장과 명령 치환에 의해 지정되는 것을 주목할 필요가 POSIX 표준 동안, let
그리고 $[...]
수 없습니다.
답변
-
let
명령은 산술 평가를 수행 하며 쉘 내장입니다.-
이 명령을 실행하면 아무것도 얻지 못합니다 (평가 만 가능).
let 1+2
-
-
$(( ))
산술 확장 을 수행하는 데 사용됩니다 : 여기를 읽으십시오-
이것을 실행하면 (확장 때문에) 오류가 발생합니다.
$((1+2))
-
-
$[ ]
산술 확장에 대한 이전 구문입니다.구식 $ [expression]은 더 이상 사용되지 않으며 bash에서 곧 제거 될 것입니다.
배쉬 맨 페이지 -
expr
명령 대체 내에서 산술 확장을 수행하려는 경우 이진 명령을 사용할 수 있습니다.echo $(expr 1 + 2) echo `expr 1 + 2`
답변
위의 답변 중 일부는 구체적으로 언급 ksh93
하므로 부동 소수점 수학을 수행 할 수 있다는 점에 주목할 가치가 있습니다.
$ print $((1.0/3))
0.333333333333333333
다음과 같이 printf를 사용하여 출력의 정밀도를 제어 할 수 있습니다.
$ printf "%.4f\n" $((1.0/3))
0.3333
위와 같이 하나 이상의 인수를 부동 소수점 숫자로 지정해야합니다. 둘 다 정수로 지정되면 정수 수학 만 수행됩니다. 예 :
$ print $((1/3))
0
이것은 외부 명령 호출을 피할 수 있으므로 쉘 스크립트에서 부동 소수점 수학이 필요할 때 유용합니다.
답변
let
cron에서는 작동하지 않습니다. 나는 그것이 let
자체 환경 을 가지고 있기 때문이라고 생각 합니다. $((...))
POSIX이므로 사용하십시오 . 예를 들어
let x=1+2
echo x=$x
cron에서는 “x =”이지만 쉘에서 실행될 때 “x = 3″이됩니다.
x=$((1+2))
echo x=$x
모든 경우에 “x = 3″이됩니다.