In Emacs Lisp, how do I check if a variable is defined?
Asked
Active
Viewed 2.8k times
4 Answers
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
-
14sometimes 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
-
Equivalently, `M-: (boundp 'the-variable-name) RET` will check without the need for triggering an error. – Resigned June 2023 Dec 25 '16 at 17:42
-
2I'm pretty sure the question is about elisp scripts, not the interactive UI of Emacs. – binki Jul 04 '17 at 16:14
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