나는 이것을 알고 ${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