내가 만난 일부 쉘 스크립트는 변수를 정의할 때 다음 구문을 사용합니다.
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/sh
POSIX와 호환될 필요는 없습니다. 따라서 @Jeight가 지적했듯이 실제 세계에는 때때로 백틱이 존재하는 상황이 여전히 있습니다.
답변2
이것은 개인적인 취향이 많이 따릅니다. 백틱을 사용하여 명령을 표시하면 이전 시스템과 POSIX가 더 잘 호환됩니다. $()는 어떤 사람들에게는 더 현대적이고 읽기 쉽습니다. 나는 개인적으로 그것을 결코 사용하지 않을 것입니다 file_list_1=$(echo "list.txt")
. 보기에도 좋지 않고 추가적인 목적도 없습니다.