protected function parseTags(&$command)
    {
        // Recurse?
        if (is_array($command)) {
            foreach ($command as &$cmd) {
                if (!$this->parseTags($cmd)) {
                    return false;
                }
            }

            return true;
        }

        // Look for tags
        while (preg_match(self::REGEX_TAG, $command, $matches)) {

            // Attempt to load tag
            try {
                $value = $this->userOption($matches[2]);

            // if tag doesn't exist
            } catch (\InvalidArgumentException $exception) {

                // Default value provided?
                if (isset($matches[3])) {
                    $value = $matches[3];

                } else {
                    // Else, throw error
                    $this->error("ERROR: You need to specifiy the --".self::TAG_PREFIX.$matches[2]." argument!");
                    return false;
                }
            }

            // Replace
            $command = str_replace($matches[0], $value, $command);
        }

        return true;
    }