대체 명령 : 백틱 또는 달러 기호 / 파란 포함? [복제]
이 질문에는 이미 답변이 있습니다.
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, 눈에 조금 더 쉽다. 탈출의 몇 가지 수준 후.
'IT story' 카테고리의 다른 글
Swing GUI에서 공백 제공 (0) | 2020.06.05 |
---|---|
큰 R 프로그램을 구성하는 방법? (0) | 2020.06.05 |
하나의 활동과 다른 모든 조각 (0) | 2020.06.05 |
왜이 루프가“경고 : 반복 3u가 정의되지 않은 동작을 불러옵니다”를 생성하고 4 줄 이상을 출력합니까? (0) | 2020.06.05 |
java.lang.OutOfMemoryError : 비트 맵 크기가 VM 예산을 초과합니다-Android (0) | 2020.06.05 |