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)"

(我还在.*sed 表达式中添加了一些 s 以便将 a 附加$(rm -ri /)到 php 脚本中的行不会导致您对其进行评估。)

于 2013-01-30T19:23:28.927 回答