2017-11-29 2 views
1

私のようなエイリアスを定義使用しているときに奇妙な引数を取得:

alias strange="echo $*" 

を、その後

strange one two three 

出力:このエイリアスの

completion-ignore-case on one two three 

similary、:

alias strange2="echo $1 $2 $3 $4" 
strange2 one two three four 
completion-ignore-case on one two three four 

私はWindows上で、git-bashを使用しています... なぜこのようなことが起こっていますか?

+3

エイリアスに割り当てる前に、 '$ *'は現在の位置パラメータに展開され、エイリアスには実際に 'echo completion-ignore-case on'があります。 'alias'でパラメータを使うことはできません。代わりに関数を使います。 – PesaThe

答えて

1

エイリアスは、純粋なテキスト展開用です。それらはパラメータ化されていません。ただし、一重引用符を使用すると、限られた形式のパラメータ渡しをシミュレートできます。これはエイリアスが展開されるまで$*の拡張を延期しますが、エイリアスを使用する前に位置パラメータを手動で設定する必要があります。

$ alias strange='echo $*' 
$ set a b c 
$ strange 
a b c 
$ set d e 
$ strange 
d e 

使用に渡された「引数」は、エイリアス展開の末尾に追加されます。つまり、strange 1 2 3は最初にecho $* 1 2 3に展開され、その後通常のシェル処理が行われます。 $*の拡張は次の単語とは無関係です。

真のパラメータ化を行うには、代わりにシェル関数を使用します。

1

エイリアスを設定するときに二重引用符を使用しても展開が行われることはありません。strangeecho $*にエイリアスされ、$ *は現在のシェル引数に置き換えられます。単一引用符を使用して展開を防止し、alias strangeを使用して現在のエイリアス定義を表示します。