2011-12-18 2 views
8

지금까지 살펴본 한 가지 방법으로 프로세스의 출력으로 변수를 초기화하는 두 가지 방법이 있습니다. 이 둘 사이에 어떤 차이가 있습니까?변수를 초기화하는 다른 방법

ex1=`echo 'hello world'` 
ex2=$(echo 'hello world') 

답변

9

같은 효과가 있습니다.

$()은 더 읽기 쉽고 $()을 다른 $()에 중첩하기 쉽기 때문에 권장됩니다.

는 업데이트 :

$() 구문은 POSIX 1003.1 표준 (2004 년 판)입니다. 그러나 일부 오래된 UNIX 시스템 (SunOS, HP-UX 등)에서는 /bin/sh이이를 이해하지 못합니다.

대신 "backtick"을 사용하거나 스크립트가 그러한 환경에서 작동해야하는 경우 다른 쉘 (일반적으로 ksh)을 사용해야 할 수도 있습니다.

사용할 구문을 모른다면 $()을 사용하십시오. 역 따옴표 구문은 더 이상 사용되지 않습니다.

+0

@samus : $()는 실제로 POSIX (1003.2 생각합니다)이지만 이전 UNIX에서는 작동하지 않습니다. 나를 믿어 라. 나는 매일 사용한다. –

+0

그러나 요점은, 우리가 이식성에 대해 말할 때 우리는 POSIX를 의미합니다. 왜냐하면이 표준은 대부분의 플랫폼에서 지원되는 현재의 표준이기 때문에 특정 요구 사항을 충족시키는 특별한 경우가 있습니다. –

+0

@samus : "더 많은 휴대용"이란 말은 "새로운 POSIX 표준과 호환되지 않습니다"가 아니라 "더 많은 OSes에서 작동합니다"를 의미합니다. –

3

직접 초기화하지 않은 경우 변수를 기본값으로 초기화하는 다른 방법이 있습니다.

[jaypal:~/Temp] a="I have initialized var a" 
[jaypal:~/Temp] echo ${a:="Default value"} 
I have initialized var a 
[jaypal:~/Temp] a= 
[jaypal:~/Temp] echo ${a:="Default value"} 
Default value 
+0

연산자가 변수의 새 값을 읽고 이전 값을 출력합니다. :) –

+2

이것은 일반적으로 스크립트에 값을'$ 1','$ 2 '로 전달할 때 사용되며 명시 적으로 값이 전달되지 않은 경우에도 스크립트가 실행되도록 도와줍니다. 이를 통해 값이 할당되지 않은 경우 변수가 기본값으로 실행되도록 암시 적으로 설정할 수 있습니다. 이렇게하면 변수가 할당되었는지 여부를 확인할 수있는 약 4-5 줄의 코드가 저장됩니다. 예를 들면'if [-z "$ var"]와 같습니다. ... ' –

+0

나는 우리가 사용할 수 있다고 믿는다. echo $ {a : = "Default value"} 또는 echo $ {a : - "Default value"} – Indrajeet

관련 문제