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))