계산기로 작동하는 이유:
[root@qabun02 ~]# echo $(( 5+2 ))
7
하지만 그렇지 않나요?
[root@qabun02 ~]# echo $( (5+2) )
-bash: 5+2: command not found
내가 볼 수 있는 유일한 차이점은 괄호 사이에 공백이 없다는 것입니다.
반품:
[root@qabun02 ~]# echo $(who) root pts/0 2015-01-28 09:53 (10.40.0.115) [root@qabun02 ~]# echo $((who)) 0
((
명령 대체는 및 에 어떻게 응답합니까 ( (
?
답변1
문제는 $(
명령 대체가 활성화되어 있지만 $((
산술 확장이 활성화되어 있다는 것입니다.
$( (5+2) )
명령입니다. 즉, 서브쉘의 명령입니다 (5+2)
. 5+2
그러나 이것은 유효한 명령이 아닙니다.
$((who))
who
정의되지 않은 변수 값(예: 0)으로 대체됩니다.
답변2
배쉬에서:
$(...)
하위 명령 대체를 나타냅니다("..."와 유사).
$((...))
산술 평가 대체를 나타냅니다.
${...}
변수/매개변수 대체를 나타냅니다.
는 문자의 원자 시퀀스로 처리 되어야 하며 $((
( 로 끝나야 함 ) , 또는 ))
와 전혀 동일하지 않습니다 .$ ((
$( (
$ ( (
OBS: a는 $
바로 앞에 아무것도 없는 경우 (
에 해당하며 블록 내에서 산술 평가의 우선순위를 지정하는 데 사용할 수 (
있습니다 ( .$((...))
$(( (3+4)*5 ))
$(( 3+4*5 ))