2016-05-10 1 views
0

私はcshエイリアスに相当するbashを作成しようとしています。 CSHでかなり単純なエイリアスです:bashで変数を設定するcshエイリアスのbash相当版を作成するには

alias gfiles='files="\`grep -l \\!*\`"; echo $files' 

別名があるため、パラメータ置換の動作しません、それは親シェルで変数を設定する必要があるため、機能が動作しません。 このエイリアスを使用すると、viまたはls以上の一致するファイルを表示できます。エコーは絶対に必要なわけではありませんが、私はそれが有用であることを発見しました。 bashで同等の機能を実行するにはどうすればよいですか?

+0

えっ?関数は呼び出し側で絶対に変数を設定できます。彼らはそれを強制する何かをしない限り、サブプロセスで実行されません。 –

+2

と言っていますが、**スカラー変数**(単一文字列)を使用してファイル名の**リスト**を格納しています(それぞれが文字列です)。スペースで名前を格納する必要がある場合はどうなりますか?適切な方法はアレイを使用することです。 –

答えて

2

関数は子供では実行されないため、環境変数を設定することはできます。

gfiles() { 
    files="$(grep -l "[email protected]")" 
    echo "$files" 
} 

(私はあなたのエイリアスが何をするかわからないんだけど、私はそれはタイプミスがあると疑われる)

+0

エイリアスは、cshエイリアスをbashに書き換える試みです。したがって、 '\\!*'はcshエイリアスの引数のためのcsh構文であるので、関数内のターゲット 'grep'は' grep -l $ * 'でなければなりません。 –

+0

@CraigEstey:Ah、Ok。その場合、正しい置換は "$ @"であり、引数を再単語化しません。ありがとう。答えを編集しました。 – rici

関連する問題