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"

など。

関連情報