`$1` と代替デフォルトを使用するエイリアスは、引数と代替値を出力します。

`$1` と代替デフォルトを使用するエイリアスは、引数と代替値を出力します。

$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

おすすめ記事