:
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"
등.