是否可以仅在bash脚本之前(或之后)获得定义的ENV变量

时间:2018-07-03 00:25:47

标签: bash

所以基本上我想知道我是否可以获取在shell脚本命令之前定义的变量?

public function actionCompete()
{
    $form = new competition;

    if (isset($_POST['competition'])) {
        if ($_POST['competition']['relationship'] == 'team') {
            $form->setScenario('team');
        } elseif ($_POST['competition']['relationship'] == 'new') {
            return $this->redirect('signup');
        }

        $form->load($_POST);

        if ($form->validate()) {
            Yii::$app->session->setFlash('success', 'You qualify!');

        }
    }

    return $this->render('apply', array('form' => $form));
}

public function validContest($attribute, $params) {
    $Contest = Yii::$app->db->createCommand('
        SELECT nm.ID
        FROM community_member
        JOIN team_member AS tm ON cm.ID_NUM = tm.ID_NUM
        WHERE nm.FIRST_NAME = :first AND (nm.id_num = :id OR nm.LAST_NAME = :last OR nm.BIRTH_NAME = :birthName) AND bm.BIRTH_DTE = :birthDate AND tm.standing IS NOT NULL AND tm.joined_yr = :memberYear
    ')->bindValues([
        ':id' => $this->Id,
        ':first' => $this->firstName,
        ':last' => $this->lastName,
        ':birthName' => $this->lastName,
        ':birthDate' => Yii::$app->formatter->asDate($this->dob, 'Y-M-d'),
        ':memberYear' => $this->qualifyYear,
    ])->queryScalar() !== false;

$ FOO=bar myscript.sh

$ myscript.sh FOO=bar 中,只需获取myscript.sh,类似于获取参数的方式。

谢谢您!

1 个答案:

答案 0 :(得分:1)

$ FOO=bar myscript.sh

由外壳处理,外壳创建了一个新环境以运行myscript.sh并将FOO=bar添加到该环境。环境变量不包含任何上下文信息。环境变量只是环境变量。 myscript.sh无法区分上述命令和顺序:

export FOO=bar
# ...
myscript.sh

不管省略号省略了多少个命令。

相反,

myscript.sh FOO=bar

仅将命令行选项传递给myscript.sh,它将看到FOO=bar作为$1的值。解析位置参数以查找具有赋值形式的参数是相对容易的,尽管必须采取一些措施以避免误报。 (即,仅使用包含=字符的所有位置参数是不够的;应检查前面的字符都是有效的标识符字符。)