mirror of
https://github.com/fish-shell/fish-shell.git
synced 2026-06-04 07:21:14 -03:00
Support FOO=bar syntax for passing variables to individual commands
This adds initial support for statements with prefixed variable assignments.
Statments like this are supported:
a=1 b=$a echo $b # outputs 1
Just like in other shells, the left-hand side of each assignment must
be a valid variable identifier (no quoting/escaping). Array indexing
(PATH[1]=/bin ls $PATH) is *not* yet supported, but can be added fairly
easily.
The right hand side may be any valid string token, like a command
substitution, or a brace expansion.
Since `a=* foo` is equivalent to `begin set -lx a *; foo; end`,
the assignment, like `set`, uses nullglob behavior, e.g. below command
can safely be used to check if a directory is empty.
x=/nothing/{,.}* test (count $x) -eq 0
Generic file completion is done after the equal sign, so for example
pressing tab after something like `HOME=/` completes files in the
root directory
Subcommand completion works, so something like
`GIT_DIR=repo.git and command git ` correctly calls git completions
(but the git completion does not use the variable as of now).
The variable assignment is highlighted like an argument.
Closes #6048
This commit is contained in:
@@ -119,6 +119,12 @@ Examples
|
||||
echo "Python is at $python_path"
|
||||
end
|
||||
|
||||
# Like other shells, fish 3.1 supports this syntax for passing a variable to just one command:
|
||||
# Run fish with a temporary home directory.
|
||||
HOME=(mktemp -d) fish
|
||||
# Which is essentially the same as:
|
||||
begin; set -lx HOME (mktemp -d); fish; end
|
||||
|
||||
Notes
|
||||
-----
|
||||
|
||||
|
||||
Reference in New Issue
Block a user