dagger/dagger · error

can't assign multiple variables: %q

Error message

can't assign multiple variables: %q

What it means

Fires in parseEntry when a dotenv line parses as a shell statement containing more than one assignment (e.g. A=1 B=2). The dotenv parser supports exactly one variable assignment per line, so multi-assignment lines are rejected.

Source

Thrown at core/dotenv/dotenv.go:101

	// Use shell parser for complex cases
	parser := syntax.NewParser()
	file, err := parser.Parse(strings.NewReader(line), "")
	if err != nil {
		return nil, fmt.Errorf("parse error: %q: %w", line, err)
	}
	if len(file.Stmts) == 0 {
		return nil, nil // blank line
	}

	stmt := file.Stmts[0]
	call, ok := stmt.Cmd.(*syntax.CallExpr)
	if !ok || len(call.Assigns) == 0 {
		return nil, fmt.Errorf("parse error: %q: not a bare assignment", line)
	}

	assigns := call.Assigns
	if len(assigns) != 1 {
		return nil, fmt.Errorf("can't assign multiple variables: %q", line)
	}

	assign := assigns[0]
	if assign.Name == nil {
		return nil, fmt.Errorf("missing name in variable assignment: %q", line)
	}

	return &parsedEntry{
		name:  assign.Name.Value,
		value: assign.Value,
		args:  call.Args,
	}, nil
}

// Lookup gets the expanded value of a variable with memoization
func (g *GraphEvaluator) Lookup(name string) (string, bool, error) {
	// Check if already expanded
	if value, ok := g.expanded[name]; ok {

View on GitHub (pinned to 82ba2681db)

Solutions

  1. Split the line into one assignment per line in the .env file
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at core/dotenv/dotenv.go:101 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of dagger/dagger@82ba2681db (2026-09-05). Data as JSON: /api/errors/97da1f82e83e1504. Report an issue: GitHub.