:bashのコロンコマンド


28

bash初心者として、コピー/貼り付け+ githubを使用して.bashrcをアップグレードしましたが、:私とGoogleの両方を困らせるコマンドに出くわしました。例えば: ${USER_BASH_COMPLETION_DIR:=~/.bash_completion.d}

もともと私の.bashrcにこのステートメントがなく、この内容を端末に入力します(->は関連する出力を示します):

: ${USER_BASH_COMPLETION_DIR=~/.bash_completion.d}
echo $USER_BASH_COMPLETION_DIR
-> /Users/sh/.bash_completion.d

そして:

: ${USER_BASH_COMPLETION_DIR=~/.bash_completion.d}
export USER_BASH_COMPLETION_DIR=asdf
echo $USER_BASH_COMPLETION_DIR
-> asdf

しかし:

: ${USER_BASH_COMPLETION_DIR=~/.bash_completion.d}
export USER_BASH_COMPLETION_DIR=asdf
: ${USER_BASH_COMPLETION_DIR=~/.bash_completion.d}
echo $USER_BASH_COMPLETION_DIR
-> asdf

わかりません!

1)コロンコマンドはどのように変数を設定しexportますか?

2):.bashrcで使用するロジックは何ですか?

Mac 10.6.8を使用する

(文脈から外れたキーワードコロンのインクルードは、その用語を検索しようとした私のような他の人を助けるためだけです)


素晴らしい回答をご覧くださいstackoverflow.com/questions/10390406/…–
セドリック

回答:


45

:は基本的にtrueコマンドと同等のシェル組み込みコマンドです。ifステートメントの後など、多くの場合、no-opとして使用されます。この問題の詳細については、スタックオーバーフローを参照してください

${varname=value}基本的な手段は、の値に設定$varnamevalueている場合は、$varnameすでに設定されていないが、その後、$ VARNAMEの値を返します。ただし、コマンドラインで実行しようとすると、返された値を実行しようとします。:no-opとして先頭に置くことで、bashが値を実行しようとするのを防ぎます。

2つのわずかに異なる形式があることに注意してください。

${varname:=value}

varnameが未設定またはヌルの場合、varnameをvalueに設定します。

${varname=value}

varnameが現在設定されていない場合にのみ、varnameの値を設定します(つまり、varnameを ""からvalueに変更しません)

(コメントでそれを明確にしてくれたchepnerに感謝します)。

このメソッドを参照している他の誰か

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.