Bash 스크립트에서 줄 시작 부분에 ":"를 사용하는 방법은 무엇입니까? [복사]

Bash 스크립트에서 줄 시작 부분에 ":"를 사용하는 방법은 무엇입니까? [복사]

:Bash 스크립트에서 줄 헤더의 목적은 무엇입니까?

:다음 코드 조각에 표시된 것처럼 줄 시작 부분에 몇 가지 사용법이 표시됩니다.

cgcreate -g "$cgroups:/$uuid"
: "${BOCKER_CPU_SHARE:=512}" && cgset -r cpu.shares="$BOCKER_CPU_SHARE" "$uuid"
: "${BOCKER_MEM_LIMIT:=512}" && cgset -r memory.limit_in_bytes="$((BOCKER_MEM_LIMIT * 1000000))" "$uuid"

실험 결과 표준 출력에는 아무 것도 인쇄되지 않는다는 점에서 :comment()와 매우 유사하게 작동하는 것으로 나타났습니다 . 그러나 새 파일이 생성되어 코드가 실행됩니다.#: $(echo foo > bar)bar

답변1

$ help :
:: :
    Null command.
    
    No effect; the command does nothing.
    
    Exit Status:
    Always succeeds.

이는 와 동일한 명령입니다 true(주어진 설명이 help다름을 제외하고).

특히,이것은 일반적인 명령입니다는 구문 요소가 아니므로 주석과 달리 명령줄의 나머지 부분은 유효한 셸 구문이어야 하며 확장은 계속 발생합니다.

"${BOCKER_CPU_SHARE:=512}"예를 들어 set-default-value 확장 예에서 512변수가 설정되지 않거나 비어 있으면 다음과 같이 설정됩니다.

$ foo=
$ : "${foo:=512}"
$ echo "$foo"
512

하지만

$ foo=42
$ echo ${foo:=512}       # no change since already has value
42

어떻게 보면 이 확장은 의 축약형이지만 if [ -z "$foo" ]; then foo=512; fi확장 기능으로만 작동하기 때문에 함께 사용하려면 몇 가지 명령이 필요합니다. 그리고 :그 자체로는 아무 것도 하지 않기 때문에 이 목적으로 자주 사용되는 것입니다.

그러나 이것이 항상 사실이기 때문에 &&요점이 무엇인지 잘 모르겠습니다 :. 따라서 다음과 같이 쓸 수 있습니다.

: "${BOCKER_CPU_SHARE:=512}"
cgset -r cpu.shares="$BOCKER_CPU_SHARE" "$uuid"

등.

관련 정보