변수를 정의하기 위해 언제 $()를 사용해야 합니까?

변수를 정의하기 위해 언제 $()를 사용해야 합니까?

내가 만난 일부 쉘 스크립트는 변수를 정의할 때 다음 구문을 사용합니다.

file_list_1=$(echo "list.txt")

또는

file_list_2=$(find ./)

나는 다음을 사용할 것이다:

file_list_1="list.txt"

그리고

file_list_2=`find ./`

위의 것 중 어느 것이 더 좋고 안전한지 잘 모르겠습니다. x=$( )변수를 설정할 때 구문을 사용하면 어떤 이점이 있나요?

답변1

매뉴얼에서( man bash):

$(주문하다)  또는  `주문하다`

Bash는 다음을 실행하여 확장을 수행합니다.주문하다명령 대체를 명령의 표준 출력으로 바꾸고 후행 줄 바꿈을 제거합니다. 포함된 개행 문자는 제거되지 않지만 단어 분리 중에 제거될 수 있습니다. 명령 대체$(cat 문서)동일하지만 더 빠른 대안을 사용할 수 있습니다.$(< 문서).

이전 스타일의 백틱 대체 형식을 사용하는 경우 백슬래시는 뒤에 $, `또는 가 오지 않는 한 문자 그대로의 의미를 유지합니다 \. 선행 백슬래시가 없는 첫 번째 백틱은 명령 대체를 종료합니다. 사용할 때$(주문하다)형식에서 괄호 안의 모든 문자는 명령을 구성합니다. 특별히 처리되는 문자는 없습니다.

POSIX 표준은 $()명령 대체 형식을 정의합니다. $() 중첩된 명령을 허용하고 보기가 더 좋아졌습니다(가독성). 그것은 모두에게 효과가 있어야합니다본 껍질.

IEEE Std 1003.1, Shell Command Language,2.6.3 명령 대체.

최소한 하나의 Unix(AIX)가 이를 문서화했습니다.백틱은 더 이상 사용되지 않습니다.. 이 링크에서:

ksh는 백틱 구문을 허용하지만 X/Open 이식성 가이드 버전 4 및 POSIX 표준에서는 더 이상 사용되지 않는 것으로 간주됩니다. 이러한 표준에서는 이식 가능한 응용 프로그램에서 $(command) 구문을 사용할 것을 권장합니다.

그러나 /bin/shPOSIX와 호환될 필요는 없습니다. 따라서 @Jeight가 지적했듯이 실제 세계에는 때때로 백틱이 존재하는 상황이 여전히 있습니다.

답변2

이것은 개인적인 취향이 많이 따릅니다. 백틱을 사용하여 명령을 표시하면 이전 시스템과 POSIX가 더 잘 호환됩니다. $()는 어떤 사람들에게는 더 현대적이고 읽기 쉽습니다. 나는 개인적으로 그것을 결코 사용하지 않을 것입니다 file_list_1=$(echo "list.txt"). 보기에도 좋지 않고 추가적인 목적도 없습니다.

관련 정보