I am currently trying out the fish shell instead of using bash. One type of notation I'm having trouble learning the fish-equivalent notation for is $(command), similar to how it is described in this SOF post. How do I write this using fish? Keep in mind that I could use backslash characters around the command I want to evaluate, but the linked post and other posts discourage this because it is an old style of evaluating commands.
Specifically, this is the bash command I want to convert to fish syntax (for initializing rbenv during startup of the shell):
eval "$(rbenv init -)"
4 Answers 4
In fish, $ is used only for variables. Correct notation equivalent to bash $(command) is just (command) in fish.
1 Comment
eval (docker-machine env default --no-proxy --shell=fish) :D thanks for the help tooFYI: If you additionally need to use this inside a string:
echo "Found "(count $PATH)" paths in PATH env var"
1 Comment
Since fish 3.4 (released March 2022), $()-substitution is supported. It works the same as ()-substitution, but can be used inside double-quoted strings.
2 Comments
Watch out that () and $() in fish are not totally equivalent to $() in bash.
Fish only splits command substitutions on newlines.
- In fish
cmd $(echo "A B C")is equivalent tocmd 'A B C', but - in bash
cmd $(echo "A B C")is equivalent tocmd A B C.
But cmd $(echo -e "A\nB\nC") is indeed equivalent in fish and bash.
set foo (echo bar); echo $foooutputsbar.