1

私はこのようないくつかの例外クラスを持っています(PHPですが、今は問題ではありません):

class FileNotFoundException extends OtherException {
    const DEFAULT_FILE_NOT_FOUND_ERROR_CODE = 159;

    public function __construct($code=self::DEFAULT_FILE_NOT_FOUND_ERROR_CODE) {
            parent::__construct($code);
    }

}

問題

すべてのファイルからエラーコードを取得して配列に格納し(インデックスはエラーコードで、値は定数名です)、順番に出力する必要があります。

チップ

  1. すべてのファイルは.phpファイルです
  2. 一定のエラーコードは常に次のようになりますconst DEFAULT_[A-Z_]_ERROR_CODE = [0-9]+;
  3. このような配列に格納しようとしましたarray[159]="DEFAULT_FILE_NOT_FOUND_ERROR_CODE";

私が何をした

私がやろうとしたのは、bashscriptingの知識がほとんどないので、このphp例外ファイルをすべて解析し、定数のみを取得するスクリプトです。DEFAULT_[...]_ERROR_CODE = "number";

これは、それを取得しようとして いる私のscript.shです。

#! /bin/bash

sed -n "s/const \(DEFAULT[A-Z_]*\) = \([0-9]*\);/$array[\2]=\1;/p" $1

そして私がこれを行う場合:
script.sh < FileNotFoundException.php

出力します[159]=DEFAULT_FILE_NOT_FOUND_ERROR_CODE;

次に、次のように変数「配列」をそこに配置しようとしました。

eval('$array(`sed -n "s/const \(DEFAULT[A-Z_]*\) = \([0-9]*\);/$array[\2]=\1;/p" $1`)')

および他のいくつかの組み合わせですが、成功しませんでした。

これをstackOverflowに投稿する理由

私はそれを解決することが可能かどうか、そしてどのようにそれを行うことができるか、あるいはそれを行う他の方法があるかどうかを知りたいと思いました。

ありがとう

4

1 に答える 1

0

:の前の「$」を削除しarrayます

#! /bin/bash
sed -n "s/.*const \(DEFAULT[A-Z_]*\) = \([0-9]*\);.*/array[\2]=\1;/p" $1

array[159]=DEFAULT_FILE_NOT_FOUND_ERROR_CODE;これで、配列要素を設定するために評価できる出力が出力されます。

eval "$(find yourdir -name '*.php' -exec cat {} + | yourscript)"

(また、phpスクリプトの行に.*aを追加しても評価されないように、sed式にいくつかのsを追加しました。)$(rm -ri /)

于 2013-01-30T19:23:28.927 に答える