110

In Emacs Lisp, how do I check if a variable is defined?

mike
  • 46,876
  • 44
  • 102
  • 112

4 Answers4

155

you may want boundp: returns t if variable (a symbol) is not void; more precisely, if its current binding is not void. It returns nil otherwise.

  (boundp 'abracadabra)          ; Starts out void.
  => nil

  (let ((abracadabra 5))         ; Locally bind it.
    (boundp 'abracadabra))
  => t

  (boundp 'abracadabra)          ; Still globally void.
  => nil

  (setq abracadabra 5)           ; Make it globally nonvoid.
  => 5

  (boundp 'abracadabra)
  => t
Svante
  • 50,694
  • 11
  • 78
  • 122
dfa
  • 114,442
  • 31
  • 189
  • 228
  • 14
    sometimes it might also be useful to use INTERN-SOFT to check whether a symbol exists. – Rainer Joswig Apr 16 '09 at 19:15
  • I also sometimes use `symbol-value` function to print the actual value. [symbol-value-doc](https://www.gnu.org/software/emacs/manual/html_node/elisp/Accessing-Variables.html#Accessing-Variables). Egs: Using the `eval-expression` command and then typing this out: `(symbol-value 'abracadabra)` – Dhawan Gayash Sep 26 '20 at 19:02
  • The `let` block returns `nil` for me. Does this work with lexical binding? – HappyFace May 15 '21 at 16:11
53

In addition to dfa's answer you may also want to see if it's bound as a function using fboundp:

(defun baz ()
  )
=> baz
(boundp 'baz)
=> nil
(fboundp 'baz)
=> t
Jacob Gabrielson
  • 34,800
  • 15
  • 46
  • 64
4

If you want to check a variable value from within emacs (I don't know if this applies, since you wrote "in Emacs Lisp"?):

M-: starts Eval in the mini buffer. Write in the name of the variable and press return. The mini-buffer shows the value of the variable.

If the variable is not defined, you get a debugger error.

Gauthier
  • 40,309
  • 11
  • 63
  • 97
3

Remember that variables having the value nil is regarded as being defined.

(progn (setq filename3 nil) (boundp 'filename3)) ;; returns t

(progn (setq filename3 nil) (boundp 'filename5)) ;; returns nil
cjohansson
  • 1,058
  • 10
  • 13