anchor.diff:    t)
   
   (defun handle-dollar (stream initiation-sequence context)
  -  (declare (ignore initiation-sequence))
  -  (lexer-context-add-part context (read-dollar-word stream))
  +  (let ((next-char (lexer-context-next-char context))
  +        name)
  +    (cond
  +      ((or (find next-char #(#\@ #\* #\# #\? #\- #\$ #\!))
  +           (digit-char-p next-char))
  +       (lexer-context-consume-character context)
  +       (let ((part (make-instance 'variable-expansion-word
  +                                  :variable (string next-char)
  +                                  :value (concatenate 'string "$" (string next-char)))))
  +         (lexer-context-add-part context part)))
  +
  +      ((setf name (read-name stream :error-on-invalid-name-p nil))
  +       (let ((part (make-instance 'variable-expansion-word
  +                                  :variable name
  +                                  :value (concatenate 'string "$" name))))
  +         (lexer-context-add-part context part)))
  +
  +      (t
  +       (lexer-context-add-chars context initiation-sequence))))
     t)
   
   (defun handle-dollar-paren (stream initiation-sequence context)
  
positive.code:       (assert (equal #\( next-char))
        (take))))
  
  (defun read-name (stream)
    (let ((next-char (peek-char nil stream nil :eof))
          (result (make-extensible-vector :element-type 'character)))
      (labels ((non-digit ()
  
negative.code: (defun read-dollar-curly (stream)
    (declare (ignore stream))
    (error 'not-implemented :feature "${}"))
  
  (defun read-comment (stream)
    (let ((next-char (peek-char nil stream nil :eof)))
  