Next: Globbing, Up: Expansion [Contents][Index]

### 3.1 Dollars Expansion

Eshell has different `$` expansion syntax from other shells. There are some similarities, but don’t let these lull you into a false sense of familiarity.

`$var`

  Expands to the value bound to `var`. This is the main way to use variables in command invocations.

`$#var`

  Expands to the length of the value bound to `var`. Raises an error if the value is not a sequence (see Sequences in The Emacs Lisp Reference Manual).

`$(lisp)`

  Expands to the result of evaluating the S-expression `(lisp)`. On its own, this is identical to just `(lisp)`, but with the `$`, it can be used in a string, such as ‘`/some/path/$(lisp).txt`’.

`${command}`

  Returns the output of `command`, which can be any valid Eshell command invocation, and may even contain expansions.

`$var[i]`

  Expands to the `i`th element of the value bound to `var`. If the value is a string, it will be split at whitespace to make it a list. Again, raises an error if the value is not a sequence.

`$var[: i]`

  As above, but now splitting occurs at the colon character.

`$var[: i j]`

  As above, but instead of returning just a string, it now returns a list of two strings. If the result is being interpolated into a larger string, this list will be flattened into one big string, with each element separated by a space.

`$var["\\\\" i]`

  Separate on backslash characters. Actually, the first argument – if it doesn’t have the form of a number, or a plain variable name – can be any regular expression. So to split on numbers, use ‘`$var["[0-9]+" 10 20]`’.

`$var[hello]`

  Calls `assoc` on `var` with `"hello"`, expecting it to be an alist (see Association Lists in The Emacs Lisp Reference Manual).

`$#var[hello]`

  Returns the length of the cdr of the element of `var` who car is equal to `"hello"`.

Next: Globbing, Up: Expansion [Contents][Index]