IT story

대체 명령 : 백틱 또는 달러 기호 / 파란 포함?

hot-time 2020. 6. 5. 08:22
반응형

대체 명령 : 백틱 또는 달러 기호 / 파란 포함? [복제]


이 질문에는 이미 답변이 있습니다.

bash에서 명령 대체를 수행하는 선호되는 방법은 무엇입니까?

나는 항상 다음과 같이했다 :

echo "Hello, `whoami`."

그러나 최근에 나는 종종 다음과 같이 쓰여지는 것을 보았습니다.

echo "Hello, $(whoami)."

선호하는 구문은 무엇이며 왜 그렇습니까? 아니면 서로 교환이 가능합니까?

나는 텍스트 편집기가 무엇인지 알고 있고 구문 강조를 적절하게 수행하기 때문에 첫 번째를 선호하는 경향이 있습니다.

여기서는 이스케이프 된 문자가 각 경우에 약간 다르게 작동한다는 것을 읽었 지만 어떤 동작이 바람직한 지 또는 상황에 따라 달라지는지는 분명하지 않습니다.

부수적 인 질문 : 명령 대체를 중첩 할 때와 같이 하나의 스크립트에서 양식을 모두 사용하는 것은 좋지 않습니까?


여기에는 몇 가지 질문 / 문제가 있으므로 포스터 텍스트의 각 섹션을 반복하여 인용 한 다음 응답을 드리겠습니다.

선호하는 구문은 무엇이며 왜 그렇습니까? 아니면 서로 교환이 가능합니까?

나는 $(some_command)양식이 양식보다 선호 한다고 말하고 싶습니다 `some_command`. 한 쌍의 역 따옴표 ( "`"문자, 백틱 및 억음 악센트라고도 함)를 사용하는 두 번째 형식은 역사적 방식입니다. 달러 기호와 괄호를 사용하는 첫 번째 양식은 최신 POSIX 양식이므로 더 표준적인 방법 일 것입니다. 차례로, 그것은 다른 쉘과 다른 * nix 구현으로 올바르게 작동 할 가능성이 높다는 것을 의미한다고 생각합니다.

첫 번째 (POSIX) 형식을 선호하는 또 다른 이유는 특히 명령 대체가 중첩 될 때 더 읽기 쉽다는 것입니다. 또한 백틱 형식을 사용하면 중첩 된 (내부) 명령 대체에서 백틱 문자를 백 슬래시 이스케이프 처리해야합니다.

POSIX 양식을 사용하면 그렇게 할 필요가 없습니다.

그것들이 상호 교환 가능한지 여부에 관해서는, 일반적으로 이스케이프 된 문자에 대해 언급 한 예외를 제외하고는 상호 교환 가능하다고 말하고 싶습니다. 그러나 나는 모든 현대 껍질과 모든 현대 * 닉스가 두 가지 형식을 모두 지원하는지 여부를 알 수 없으며 말할 수 없습니다. 나는 그들이 오래된 쉘 / 오래된 * nixes를 의심합니다. 내가 당신이라면, 완성 된 스크립트를 실행하려는 쉘 / * nix 구현에서 각 양식에 대한 몇 가지 빠르고 간단한 테스트를 먼저 실행하지 않으면 상호 호환성에 의존하지 않을 것입니다.

나는 텍스트 편집기가 무엇인지 알고 있고 구문 강조를 적절하게 수행하기 때문에 첫 번째를 선호하는 경향이 있습니다.

불행히도 편집자가 POSIX 양식을 지원하지 않는 것 같습니다. 아마도 POSIX 방식을 지원하는 편집기 업데이트가 있는지 확인해야합니다. 장거리 어쩌면 누가 알 겠어요? 또는 다른 편집기를 사용해 보는 것도 좋습니다.

GGG, 어떤 텍스트 편집기를 사용하고 있습니까 ???

여기서는 이스케이프 된 문자가 각 경우에 약간 다르게 작동한다는 것을 읽었지만 어떤 동작이 바람직한 지 또는 상황에 따라 달라지는지는 분명하지 않습니다.

나는 그것이 당신이 성취하려는 것에 달려 있다고 말하고 싶습니다. 즉, 명령 대체와 함께 이스케이프 문자를 사용하는지 여부입니다.

부수적 인 질문 : 명령 대체를 중첩 할 때와 같이 하나의 스크립트에서 두 양식을 모두 사용하는 것은 좋지 않습니까?

글쎄, 스크립트를 읽는 것이 약간 쉬울 수 있지만 (인쇄 적으로 말하면) 이해하기가 더 어려워집니다! 6 개월 후 스크립트를 읽는 사람 (또는 당신이 6 개월 후에 읽은 사람)은 왜 당신이 왜 한 양식이나 다른 양식을 고수하지 않았는지 궁금 할 것입니다. 또한 한 스크립트에서 두 형식을 혼합하면 해당 스크립트를 이식성이 떨어질 수 있습니다. 스크립트가 제대로 작동하려면 스크립트를 실행하는 셸이 한 가지 형식 만 아니라 두 가지 형식을 모두 지원해야합니다.

쉘 스크립트를 이해하기 쉽게 만들기 위해 기술적 인 이유가없는 한 개인적으로 하나의 스크립트 전체에서 하나의 양식 또는 다른 양식을 고수하는 것을 선호합니다. 또한 POSIX 양식을 이전 양식보다 선호합니다. 달리 기술적 인 이유가 없다면 다시 한 번 말입니다.

명령 대체 주제와이를 수행하기위한 두 가지 다른 형식에 대한 자세한 내용은 Robbins 및 Beebe의 O'Reilly 책 "Classic Shell Scripting"2 판에서 명령 대체에 대한 섹션을 참조하십시오. 이 섹션에서 저자는 명령 대체를위한 POSIX 양식이 "모든 새로운 개발에 권장된다"고 말합니다. 나는이 책에 재정적 관심이 없다. 쉘 스크립팅에 대해 내가 가지고 있고 사랑하는 것 중 하나이지만, 중간 또는 고급 쉘 스크립팅에 더 적합하지만 실제로 쉘 스크립팅을 시작하는 것은 아닙니다.

-비.


bash manual 과의 차이점을 읽을 수 있습니다 . 대부분의 경우 상호 교환 가능합니다.


한 가지 언급해야 할 것은 backquote명령을 중첩하기 위해 탈출해야한다는 것입니다 .

$ echo $(echo hello $(echo word))
hello word    

$ echo `echo hello \`echo word\``
hello word


백틱은 고대 쉘과 호환되므로 GNU autoconf 스 니펫과 같이 이식성이 필요한 스크립트를 선호해야합니다.

$()형태는 ESP, 눈에 조금 더 쉽다. 탈출의 몇 가지 수준 후.

참고 URL : https://stackoverflow.com/questions/9405478/command-substitution-backticks-or-dollar-sign-paren-enclosed

반응형