1

のようなファイル名があります。pkg_list

a-1.2b-1.tar.gz
c-2.5b-1.tar.gz
a xx-1.4.txz
a$xx-1.4.txz
中文-3.txz
xx-3.2-2.tar.gz
xxy-1.3.tar.gz

私のbash関数は「xx」のようなパッケージ名を入力できます

pkg_find() { # <pkg_name> as $1
  grep "^$1-[0-9]*" pkg_list
}
pkg_find xx # wish it return xx-3.2-2.tar.gz

$1 を pkg_find に直接渡すことができないことはわかっています。正しい方法は何ですか?

【解決しよう】この場合、$1 がダブルクォートで囲まれているため、正規表現のメタ文字でもパラメータとして渡せることがわかりました。

4

3 に答える 3

2

あなたがしていることは私には正しいように見えます。

何が機能していないのですか?

質問のコードを試してみたところ、pkg_find xx「xx-3.2-2.tar.gz」が表示されました。これは、あなたが望んでいた出力です。

于 2013-01-09T09:55:46.947 に答える
1

直接お渡しできます$1pkg_find

pkg_find() { # <pkg_name> as $1
  grep "^$1-[0-9]*" pkg_list
}
pkg_find "$1"

本体に$1, $2, ..は、コマンド ラインまたは別の呼び出しスクリプトから取得するスクリプト引数があります。シェル関数では、関数の引数を参照します。

コマンドラインでこれを呼び出すと

sh pkg_find.sh xx

あなたが得る

xx-3.2-2.tar.gz

于 2013-01-09T10:37:48.207 に答える
0

あなたのコードとあなたの質問は、私には異なることを求めているように見えます.次のいずれか/両方が必要です:

スクリプトの最上位にある $1、$2 などはスクリプト パラメータです。関数内では、関数パラメーターに設定されるか、パラメーターがない場合は設定解除されます。

于 2013-01-09T10:04:05.510 に答える