std::string first = val.substr(0, 1);
      // The priorities are as follows:
      //     1. environment variable
      //     2. default value
      if (!first.compare("$")) {
        std::string::size_type default_pos = val.find("=");
        string return_val_env = val.substr(1, default_pos - 1);

        const char* env_value = std::getenv(return_val_env.c_str());

        if (env_value == nullptr) {
          if (default_pos == string::npos) {
            std::ostringstream errorStrStream;
            errorStrStream << "[Error] There is no initial value, and no environment "
              "variables($"
              << return_val_env << ") are declared. Please confirm."
              << std::endl;
            std::string errorStr = errorStrStream.str();
            throw EnvOrInitValueMissin{errorStrStream};
          } else {
            string default_string =
              val.substr(default_pos + 1, val.length() - substr_end);

            return_val = stoul(
                default_string.substr(0, default_string.length() - substr_end));
          }
        } else {
          std::string env_end;
          string env_string(env_value);
          if (env_string.length() == 0) {
            std::ostringstream errorStrStream;
            errorStrStream << "[Error] There is no initial value, and no environment "
              "variables($"
              << return_val_env << ") are declared. Please confirm."
              << std::endl;
            std::string errorStr = errorStrStream.str();
            throw EnvOrInitValueMissin{errorStrStream};
          } else if (env_string.length() == 1)
            env_end = std::string::npos;
          else
            env_end = env_string.substr(env_string.length() - 2, env_string.length());

          unit = 1;
          substr_end = 0;
          if (!env_end.compare("KB")) {
            unit = 1024;
            substr_end = 2;
          } else if (!env_end.compare("kb")) {
            unit = 1024;
            substr_end = 2;
          } else if (!env_end.compare("MB")) {
            unit = 1024 * 1024;
            substr_end = 2;
          } else if (!env_end.compare("mb")) {
            unit = 1024 * 1024;
            substr_end = 2;
          }

          if (!env_string.substr(0, 2).compare("0x")) {
            return_val =
              stoul(env_string.substr(2, env_string.length() - substr_end),
                  nullptr, 16);
          } else if (!env_string.substr(0, 2).compare("0X")) {
            return_val =
              stoul(env_string.substr(2, env_string.length() - substr_end),
                  nullptr, 16);
          } else if (!env_string.substr(0, 2).compare("0b")) {
            return_val = stoul(
                env_string.substr(2, env_string.length() - substr_end), nullptr, 2);
          } else if (!env_string.substr(0, 2).compare("0B")) {
            return_val = stoul(
                env_string.substr(2, env_string.length() - substr_end), nullptr, 2);
          } else if (!env_string.substr(0, 1).compare("0")) {
            return_val = stoul(
                env_string.substr(1, env_string.length() - substr_end), nullptr, 8);
          } else {
            return_val =
              stoul(env_string.substr(0, env_string.length() - substr_end));
          }
        }
      }