私は次を読んだZシェルユーザーガイド:
「true」の同義語は「:」です。この形式では副作用がありますが、使用しないパラメータを提供するためによく使用されます。
: ${param:=value}
これは、すべてのBourneシェル派生物で共通に使用される慣用語です。パラメータ拡張では、
$param
以前に空であった場合はvalue値が与えられ、それ以外の場合は処理されません。これがパラメータ拡張の唯一の理由なので、通常:
このパラメータを無視します。実際、シェルはコマンドラインを簡単に設定し($param
割り当てるかどうかにかかわらず、コロンの後にis値が入る)コマンドを実行します。 ':' は与えられた引数を認識しません。
しかし、理解できません。わかりました:
。true
しかし、式には2つのコロンがあります。小さな質問で、すべてのBourneシェル派生物でこのイディオムがなぜそんなに使われていますか?その目的は何ですか?
メモ: 私はこのイディオムが両方の役割を果たしていることに興味があります。強く打つそして扱いにくい。
ありがとう
ベストアンサー1
いろいろな部分に分けてみましょう。
このコードはいくつかのパラメータを使用してコマンドを実行します:
。このコマンドは:
何も実行せず、その引数を無視します。したがって、コマンドライン全体は、パラメータで発生する副作用以外には何もしません。
この構文は、${parameter_name:=value}
ash、bash、ksh、zsh など、すべての非アンティークの Bourne スタイルのシェルに存在します。必要に応じてパラメータをデフォルト値に設定します。それは等しい
if [ -z "$parameter_name" ]; then parameter_name=value; fi
… ${parameter_name}
つまり、parameter_name
設定されていない場合、またはnull値に設定されている場合は、表示された値に設定され、新しいパラメータ値でコマンドが実行されます。${parameter_name=value}
引数が空の場合は空白のままになり、引数が設定されていない場合は表示された値のみを使用するバリアントがあります。
この構文は「パラメータ拡張」に文書化されています。POSIX仕様、およびdash、bash、ksh、およびzshのマニュアルを参照してください。
この構文にはいくつかのバリエーションがあり、特に${parameter_name:-value}
パラメータに割り当てることなく、この拡張のデフォルト値を使用できます。
要約すると: ${parameter_name:=value}
簡潔な書き込み方式だ。
if [ -z "$parameter_name" ]; then parameter_name=value; fi