programing

셸 프로그래밍에서 $(command)와 command의 차이점은 무엇입니까?

bestprogram 2023. 4. 22. 10:59

셸 프로그래밍에서 $(command)와 command의 차이점은 무엇입니까?

명령어의 출력을 sh/ksh/bash의 변수로 저장하려면 다음 중 하나를 수행합니다.

var=$(command)

또는

var=`command`

두 방법 사이에 어떤 차이가 있습니까?

백틱/그레이브마크는 다음 이유로 폐지되었습니다.$()명령어 대체를 위해 사용됩니다.$()에서처럼 쉽게 자기 안에 둥지를 틀 수 있다$(echo foo$(echo bar))backtick/gravemark 버전에서는 백슬래시를 해석하는 방법 등 다른 차이점이 있습니다.

"Bash" 참조가지 이유로 항상 $(...) 구문을 선호합니다.

다양한 차이에 대한 자세한 내용은 POSIX 사양도 참조하십시오.

그들은 똑같이 행동한다.차이점은 구문론입니다. 둥지를 틀기 쉽습니다.$()보다``:

listing=$(ls -l $(cat filenames.txt))

대.

listing=`ls -l \`cat filenames.txt\``

2014년 7월:커밋 f25f5e6 (Elia Pinto devzero2000(2014년 4월, Git 2.0)는 네스팅 문제를 더합니다.

따옴표로 둘러싸인 형식은 기존 명령어 대체 방식이며 POSIX에서 지원됩니다.
그러나 가장 단순한 용도를 제외한 모든 용도는 빠르게
복잡해집니다.
특히 삽입된 명령어 대체/또는 이중 따옴표를 사용하려면 백슬래시 문자를 사용하여 신중하게 이스케이프를 수행해야 합니다.

그렇기 때문에 git/Documentation/Coding Guidelines에 다음과 같은 내용이 기재되어 있습니다.

우리는 더 좋다$( ... )명령어 치환을 위해 사용됩니다.「」와 달리, 적절히 둥지를 틀고 있습니다.
그것은 본이 첫날부터 철자를 그렇게 썼어야 했지만, 안타깝게도 그렇지 않다.

Thiton 코멘트:

그게 이유다`echo `foo``본래의 모호성 때문에 일반적으로는 작동하지 않습니다.``열림 또는 닫힘이 될 수 있습니다.
운이나 특장점으로 인해 특별한 경우에 효과가 있을 수 있습니다.


2016년 1월 갱신 : Git 2.8(2016년 3월)은 백틱을 완전히 제거합니다.

commit ec1b763, commit 9c10377, c7b793a, commit 80a6b3f, commit 9375dcf, commit e74ef60, commit 27fe43e, commit 2525c51, ccommit becd67f, commit a5c98ac, commit 8c311fa 57049, commit 1da, commit emit emit eff, 78d28참조하십시오.Elia Pinto()에 의해 cd914d8(2016년 1월 devzero200012일)을 커밋합니다.
(2016년 1월 22일, Junio C Hamano에 의해 합병)

Git 2.8 이후로는 모두$(...) 더 이상 .`...`.

오래된 back-tick 형식을 사용하면 $, ' 또는 \ 뒤에 이어지는 경우를 제외하고 백슬래시는 문자 그대로의 의미를 유지합니다.백슬래시 앞에 첫 번째 백틱이 없으면 명령어 대체가 종료됩니다.

「 」를 하고 있는 경우$(command)형식은 괄호 사이의 모든 문자가 명령어를 구성합니다.특별히 취급되는 문자는 없습니다.

두 양식 모두 중첩할 수 있지만, 백틱의 종류에는 다음과 같은 형식이 필요합니다.

`echo \`foo\`` 

대조를 이루는 것:

$(echo $(foo))

명령어 내에서 사용할 수 있는 이스케이프되지 않은 문자를 제외하고는 거의 차이가 없습니다.'...'도 넣을 수 있어요.$(...) 안에 있는 명령어(및 그 반대)는 보다 복잡한 2레벨의 명령어 치환을 위해 사용됩니다.

백슬래시 문자/연산자에 대한 해석은 약간 다릅니다.특히 둥지를 틀 때...치환 명령어는 내부 문자를 $()로 이스케이프할 필요가 있지만 $() 변위 명령에서는 자동으로 네스팅을 인식합니다.

"두 방법 사이에 차이가 있다면?"

이 동작에 주의해 주세요.

A="A_VARIABLE"
echo "$(echo "\$A")"
echo "`echo "\$A"`"

다음과 같은 결과를 얻을 수 있습니다.

$A
A_VARIABLE

 

언급URL : https://stackoverflow.com/questions/4708549/what-is-the-difference-between-command-and-command-in-shell-programming