Bashスクリプトの場合、"$@"
を使用して引数にアクセスできます。エイリアスを使用する場合、何に相当しますか?
エイリアスはコマンドに似ており、エイリアスはすべて、それらがエイリアスするプログラムに引数として渡されます。たとえば、ls
をls -la
にエイリアスする場合、ls foo bar
と入力すると、コマンドラインでreally execute ls -la foo bar
が実行されます。
引数の解釈方法を実際に制御したい場合は、次のような関数を記述できます。
my_program_wrapper() {
local first_arg="$1" \
second_arg="$2"
shift 2 # get rid of the first two arguments
# ...
/path/to/my_program "$@"
}
エイリアスソリューション
関数自体を使用することに本当に反対の場合は、以下を使用できます。
$ alias wrap_args='f(){ echo before "$@" after; unset -f f; }; f'
$ wrap_args x y z
before x y z after
最初の引数だけが必要な場合は、$@
を$1
に置き換えることができます。
説明
これにより、引数が渡される一時関数f
が作成されます。
エイリアス引数は最後にのみ渡されます。 f
はエイリアスの最後で呼び出されることに注意してください。
unset -f
は、エイリアスが実行されるときに関数定義を削除するため、後でハングすることはありません。
現在の回答に加えて、エイリアスがどのように機能するかを理解するために重要なことは、エイリアスコマンドの後に入力するすべてのパラメーターが文字どおり最後に使用されることです。したがって、2つのコマンド(パイプされているかどうかに関係なく)にエイリアスを使用する方法はありません。最初のコマンドはパラメーターを解釈します。明確にするために、期待どおりに機能しない例を次に示します。
alias lsswp="ls -l | grep swp"
( this question に触発された例)これは常にcurrentディレクトリで実行されたls -l
の出力を使用し、その上でgrepを実行します-そう使用する
lsswp/tmp /
ls -l | grep swp /tmp/
と同等であり、notls -l /tmp/ | grep swp
と同等です。
引数を途中で使用するすべての目的で、function
の代わりにalias
を使用する必要があります。
実際には何もする必要はありません。エイリアスはこれを自動的に行います。例えば:
$ alias less="less -eirqM"
$ less foo.txt
Foo.txtの最初のページが表示され、less
はEOF(-e)で終了し、検索では大文字と小文字が区別されません(-i)など)。
私はcshについて答えています:
はい、パラメーターをエイリアスで使用できます。上記の説明とは異なり、パラメーターをエイリアスの定義のどこでも参照できます(末尾だけでなく)。
Tar-gz -ingの例:
$ alias tgz "tar cvf - \!:1 | gzip -9 > \!:2.tar.gz"
、 どこ !:1
および!:2
は、エイリアスを呼び出すときに指定するパラメーターです。
使用例:
$ ls
clrcf.dat user_comment_2016.06.03_12:51:50.txt user_comment_2016.06.03_12:54:48.txt
TEST-wADM.tec user_comment_2016.06.03_12:52:04.txt user_comment_2016.06.03_12:55:13.txt
$ tgz user* out
a user_comment_2016.06.03_12:51:50.txt 1K
a user_comment_2016.06.03_12:52:04.txt 1K
a user_comment_2016.06.03_12:54:48.txt 1K
a user_comment_2016.06.03_12:55:13.txt 1K
$ ls out*
out.tar.gz
つまり、tarコマンドの任意の場所に挿入した2つのパラメーターを使用し、それらすべてをエイリアスtgz
にしたことになります。