eshell: Dollars Expansion
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 (Sequences (elisp)Sequences
Arrays Vectors.).
‘$(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
(Association Lists (elisp)Association List Type.).
‘$#var[hello]’
Returns the length of the cdr of the element of ‘var’ who car is
equal to ‘"hello"’.