$1
パラメータ()を処理してパラメータが指定されていない場合は、デフォルト値にフォールバックできるエイリアスを作成したいと思います。例えば、
$ alias foo='NUM=${1:-42}; echo $NUM'
引数なしで呼び出すと、私が望む方法で動作します。
$ foo
42
ただし、パラメータを使用して呼び出すと、私の値とデフォルト値が印刷されます。
$ foo 69
42 69
なぜこれが起こるのか理解できません。正しく行う方法は?この種の問題を直接デバッグするにはどうすればよいですか?
ベストアンサー1
エイリアスは別のシェル構文解釈の前のテキスト置換にすぎないため、引数を受け入れません。したがって、次のようになります。
foo 69
テキストfoo
はに変わり、NUM=${1:-42}; echo $NUM
シェルは結果のテキストを解釈します。
NUM=${1:-42}; echo $NUM 69
$1
まだ設定ができていないからです。NUM=42; echo 42 69
現在のシェルで解釈され、引数を使用するインラインスクリプトの場合は、次のようにします。機能代わりに:
foo() {
NUM=${1-42}
printf '%s\n' "$NUM"
}
${1-42}
代わりに、ここでは、${1:-42}
ユーザーが呼び出すときに空の文字列が割り当てられるとfoo ''
想定しています。$NUM