Function: substitute-env-vars
substitute-env-vars is a byte-compiled function defined in env.el.gz.
Signature
(substitute-env-vars STRING &optional WHEN-UNDEFINED)
Documentation
Substitute environment variables referred to in STRING.
$FOO where FOO is an environment variable name means to substitute
the value of that variable. The variable name should be terminated
with a character not a letter, digit or underscore; otherwise, enclose
the entire variable name in braces. For instance, in ab$cd-x,
$cd is treated as an environment variable.
If WHEN-UNDEFINED is omitted or nil, references to undefined environment variables are replaced by the empty string; if it is a function, the function is called with the variable's name as argument, and should return the text with which to replace it, or nil to leave it unchanged. If it is non-nil and not a function, references to undefined variables are left unchanged.
Use $$ to insert a single dollar sign.
Source Code
;; Defined in /usr/src/emacs/lisp/env.el.gz
(defun substitute-env-vars (string &optional when-undefined)
"Substitute environment variables referred to in STRING.
`$FOO' where FOO is an environment variable name means to substitute
the value of that variable. The variable name should be terminated
with a character not a letter, digit or underscore; otherwise, enclose
the entire variable name in braces. For instance, in `ab$cd-x',
`$cd' is treated as an environment variable.
If WHEN-UNDEFINED is omitted or nil, references to undefined environment
variables are replaced by the empty string; if it is a function, the
function is called with the variable's name as argument, and should return
the text with which to replace it, or nil to leave it unchanged.
If it is non-nil and not a function, references to undefined variables are
left unchanged.
Use `$$' to insert a single dollar sign."
(declare (important-return-value t))
(let ((start 0))
(while (string-match env--substitute-vars-regexp string start)
(cond ((match-beginning 1)
(let* ((var (match-string 1 string))
(value (getenv var)))
(if (and (null value)
(if (functionp when-undefined)
(null (setq value (funcall when-undefined var)))
when-undefined))
(setq start (match-end 0))
(setq string (replace-match (or value "") t t string)
start (+ (match-beginning 0) (length value))))))
(t
(setq string (replace-match "$" t t string)
start (+ (match-beginning 0) 1)))))
string))