${var} 또는 $var를 사용하는 가장 좋은 방법은 무엇입니까? [복사]

${var} 또는 $var를 사용하는 가장 좋은 방법은 무엇입니까? [복사]

나는 이것을 알고 ${var}같은 $var일을했습니다. 또한 중괄호를 사용하여 ${var:=word}또는 같은 고급 옵션을 나타낼 수 있다는 것도 알고 있습니다 ${var#pattern}. 설명도 있어요여기.

하지만 일부 bash 스크립트에서는 가장 간단한 형태로 중괄호가 사용되는 것을 볼 수 있습니다. ${var}때로는 이 표기법만 볼 수도 있습니다 $var.

$var동일한 기능을 수행하므로 단순 구문보다 이 구문을 선호하는 이유가 있습니까 ? 휴대성을 위해서인가요? 이게 코딩 스타일인가요?

진지한 개발자로서 어떤 구문을 사용해야 합니까?

답변1

이는 명확성을 위한 것입니다. arzyfex ${foo}_bar가 지적했듯이 $foo_bar. 항상 교정기를 사용하면 절대로 그런 실수를 저지르지 않을 것입니다. 또한 두 자리 이상의 위치 매개변수를 참조하려면 중괄호가 필요합니다(예: ) ${11}.

답변2

{}라고brace expansion. ${}이를 변수 확장이라고 합니다. 가 $있거나 없는 변수 선언 및 할당 {}. 당신은 사용해야합니다

foo=50

보내다. 변수를 읽으려면(즉, 변수를 "확장"하려면) 를 사용해야 합니다 $.

$foo      // use the variable
${foo}    // same as above
${foo}bar // expand foo, and append "bar" too
$foobar   // same as ${foobar}, i.e expand a variable called foobar, if it exists.

이것은 때때로 나를 혼란스럽게 합니다. 다른 언어에서는 변수가 할당의 왼쪽에 있든 오른쪽에 있든 동일한 방식으로 변수를 참조합니다. 하지만 쉘 스크립트는 다릅니다. $foo=50여러분이 생각하는 대로 작동하지 않습니다!


중괄호는 일련의 명령을 실행하는 데에도 사용됩니다.현재의쉘 컨텍스트(예:

$ { date; top -b -n1 | head ; } >logfile 
# 'date' and 'top' output are concatenated, 

$ { date; make 2>&1; date; } | tee logfile
# now we can calculate the duration of a build from the logfile

관련 정보