私はそのようなオプションと引数を使用してプログラムを作成しようとしています:
./program.sh -f <filename> -string <string>
プログラムは、次のように<filename>
で始まる<string>
の行を出力することになっています。
grep ^<string> <filename>
さらに、次のサンプル入力ファイルの名前や年齢など、文字列に関連付けられたいくつかの情報を返すことになっています。
string name age sex
Akdk john 22 male
Jrtkfp miah 26 female
そのような動作を実現するにはどうすればよいですか?
ワンライナーでこれほど簡単な操作を行うことができます。そのためのスクリプト全体は必要ありません。 ~/.bash_aliases
ファイルに配置できる関数を使用して、開いているすべての端末にロードされるようにします。
function_name(){ awk /^$2/'{print $1": "$2", "$3}' $1 ;}
これにより、次のようにfunction_name <filename> <string>
を呼び出して結果を取得できます。
$ cat test
string name age sex
Akdk john 22 male
Jrtkfp miah 26 female
$ function_name test Akdk
Akdk: john, 22
ご覧のとおり、オプションなしでこの目標を達成できます。引数のみを使用する方がはるかに簡単です。オプションが必要な場合は、 このチュートリアル および この記事 をお勧めします。
function_name(){ … ;}
– function_name
を実行する関数…
を定義しますawk /^$2/'{…}' $1
–関数の最初の引数($1
)として指定されたファイル内で、2番目の引数(^
)で始まる行($2
)を検索します機能し、それを…
するawk '{print $1": "$2", "$3}'
–最初の列(スペースで区切られた)、次に「:」、2番目の列、「、」、3番目の列の順に印刷します注:例$1
は、bash
(端末を実行するもの)とawk
で異なる意味を持ちます。最初の引数は、最初に指定した引数に展開し、2番目は最初の列のショートカットとして解釈します。 awk
のprint
コマンドを単一引用符('
)で囲む必要があるのは、そのためbash
が$1
を展開せず、awk
を解析しないようにするためです。