1

以下は、オープン ソース プロジェクトの libtool というファイルで見つけたコードです (このシステムではコンパイルされていません)。

  case $arg in
  -*=*)
    optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;;
  *) optarg= ;;
  esac 

optarg=...ケースステートメントは取得できますが、最初の行がわかりません。それは何を手に入れようとしていますか?このテスト ケースでは、次のようにします。

CC="arm-elf-gcc"
arg="--tag=CC"
Xsed="/usr/bin/sed -e 1s/^X//"

これを OS X で実行すると、次のようになります。

../libtool: line 828: X--tag=CC: command not found

変数 optarg に「arm-elf-gcc」を割り当てようとしている可能性があると思いますが、よくわかりません。ソフトウェア全体は Ubuntu で適切にコンパイルされますが、libtool ファイルは大きく異なります。

4

2 に答える 2

1

あなたの例でarg="--tag=CC"は、値を分離しようとしていますCC

これは、正規表現を使用して削除することによって行われ--tag=ます。sed コマンドs/A/B/は、A に一致するものをすべて B に置き換えます。A は、文字、数字、アンダースコア、およびダッシュの任意の組み合わせとそれに続く等号を検索する正規表現であり、B は空です。したがって--tag=CC、正規表現の一致が見--tagられると、何も置き換えられないため、値は単にCC.

于 2012-04-25T02:11:10.510 に答える
1

これは、次の形式のコマンドライン引数を処理するだけです

`--option=value`

通常の getopts 処理では、 を指定する-o valueと変数optargが に設定されvalueます。このコードは、代わりに上記の長い形式 (getopts の 1 つの大きなオプション引数のように見えます) を指定した場合に、同じことが確実に起こるようにします。

于 2012-04-25T02:12:01.557 に答える