現在、スクリプトに基づくスクリプトがあります。その人がなぜそこにいるのか理解できませんtypeset result part dir=${1-$PWD}
。
ただ書くと同じ結果が出ますdir=$PWD
。タイポグラフィ${1-$PWD}
はdir
?$PWD
答え1
これは中括弧拡張ではなく、標準パラメータ拡張演算子(70年代のBourneシェルにさかのぼります)です。
${1-$PWD}
$1
設定されると($#
厳密に0より大きい場合)、空の文字列まで(最初の位置引数)の値に展開され、$PWD
それ以外の場合は変数の内容に展開されます。
ランニング:
info zsh 'Parameter Expansion'
もっと学ぶ。
typeset
BourneでもPOSIXでもなく、具体的でもzsh
ありません。これはKornシェル(80年代初頭)から来ており、変数の範囲を現在の関数に制限するために使用されます。これbash
はにも表示されますyash
。
ランニング:
info zsh typeset
もっと学ぶ。
答え2
${1-$PWD}
シェルパラメータ拡張モードです。
これは、他の項目(右側の項目)に基づいてデフォルト値に拡張するために使用されます-
。あなたの場合は次のとおりです。
設定しないと、
$1
拡張機能が$PWD
置き換えられます。それ以外の場合、つまり
$1
任意の値(nullを含む)に設定されている場合、その値は拡張結果として使用されます。
例:
% echo "Foo${1-$PWD}"
Foo/home/bar
% set -- Spam
% echo "Foo${1-$PWD}"
FooSpam
答え3
$1
値をテストするにはbeforeを使用します$PWD
。