오래된 진드기와 괄호 문제: 혼란

오래된 진드기와 괄호 문제: 혼란

몇 년 전에 수정된 이후 명령 확장을 위해 백틱에서 $()로 전환했습니다.

하지만 나는 여전히 백틱을 선호합니다. 키 입력 횟수가 적고 Shift키 입력이 필요하지 않습니다.

괄호는 백틱에서 발생하기 쉬운 오류가 덜 발생하기 때문에 더 나은 선택이라는 것을 이해합니다. 그러나 이 규칙을 적용한 이유는 무엇입니까?안 돼요백틱을 사용하시겠습니까?

답변1

Bash FAQ에는 그 이유가 많이 나와 있습니다.도착하다선호하다백틱에 대괄호를 사용하지만 일반적인 규칙은 없습니다.해서는 안 된다백틱을 사용하세요.

내 생각에 괄호를 선호하는 주된 이유는 내부 구문 분석이 $()외부에서 수행되는 구문 분석과 일치하지만 백틱은 그렇지 않기 때문입니다. 이는 "$()"쉘 명령을 쉽게 가져와서 랩핑할 수 있음을 의미합니다. 대신 백틱을 사용하는 경우에는 그렇지 않습니다. 이것은 계단식으로 연결되므로 "$()"백틱을 사용하는 대신 대체 항목이 포함된 명령을 쉽게 래핑할 수 있습니다.

결국 습관의 문제인 것 같아요. 간단한 경우에는 백틱을 사용하고 다른 경우에는 괄호를 사용하도록 선택하면 명령을 바꿀 때마다 해당 선택을 해야 합니다. 항상 괄호를 사용하도록 선택하면 다시 생각할 필요가 없습니다.

후자는 일부 코딩 지침에 존재하는 "백틱을 사용하지 마십시오" 규칙을 설명할 수 있습니다. 이는 개발을 단순화하고 개발자와 검토자의 오류 원인을 제거합니다. 또한 한 줄의 텍스트에도 괄호를 사용하는 것이 권장되는 이유를 설명합니다. 모든 곳에 괄호를 적용하지 않으면 스크립팅 습관을 기르기가 어렵습니다.

(키잉에 관한 한 이는 키보드 레이아웃에 따라 다릅니다. 내 AZERTY 키보드에서는 $()Shift 키가 관련되지 않으며 백틱은 쓰기가 어렵습니다.)

답변2

개인적으로 나는 중첩된 따옴표와 확장의 극단적인 경우에 더 일관적이기 때문에 항상 를 사용하고 $(...)확장이 달러 기호로 일관되게 시작하고 괄호가 백틱보다 더 명확하다는 아이디어를 좋아합니다. 백틱 따옴표는 다음과 같습니다. 매우 가볍고 일부 글꼴에서는 작은따옴표와 혼동될 수 있습니다.댓글에서 언급됨. 하지만 첫 번째를 제외하고는 모두 외모와 미학에 관한 것이므로 의견이 다를 수 있습니다.

의 논의를 바탕으로*sh 쉘에서는 백틱(예: "cmd")이 더 이상 사용되지 않습니까?, 백틱에 대한 지원은 제거되지 않을 것 같으므로 "절대 안 함"이라고 말할 이유는 없습니다.

그러나 역따옴표 구문 분석이 어떤 경우에는 이상하게 작동할 수 있다는 점에 유의하세요. 중첩된 확장을 위해 역따옴표를 추가하는 것은 매우 간단합니다.

echo `echo \`echo foo\` `

하지만 그게 전부는 아닙니다. 스테판이 책에서 지적했듯이답변도착하다 일반 문자처럼 특수 문자를 사용하는 방법은 무엇입니까?예를 들어, ksh에서 역따옴표가 포함된 큰따옴표를 중첩해도 실패합니다(더 쉽게 액세스할 수 있도록 여기에 재현하겠습니다).

ksh$ echo "`date +"%F %T"`"  
ksh: : cannot execute [Is a directory]
2020-10-01 %T

그리고 그때에도 내부 큰따옴표를 이스케이프 처리해야 합니다.좋다그것들이 없어도 구문 분석은 모호하지 않습니다.

ksh$ echo "`date +\"%F %T\"`"  
2020-10-01 14:14:27

(명령 대체에 대한 따옴표는 명령 대체와 관련이 있지만 echo여기서는 관련이 없습니다.)

따라서 이는 "절대로 말하지 않는" 상황처럼 보이고 백틱은 간단한 경우에는 잘 작동하지만 이 정도면 충분하다고 생각합니다.추천그냥 대신 사용하세요 $(). :)

관련 정보