Back to Cheatsheets
Fish shell
CLI2018-01-31
Keys
| Shortcut | Description |
|---|---|
^A ←/^E → | Move to the line beginning/end |
Alt ←/Alt → | Jump to the previous/next word |
↑/↓ | Switch to the previous/next command |
Alt ↑/Alt ↓ | Switch to the previous/next arguments |
| --- | --- |
^U | Delete to the beginning |
^C | Cancel the line |
| --- | --- |
Alt H | Show the command man page description |
Alt W | Show the short command description |
| --- | --- |
Alt . | Repeat last argument |
Sample program
#!/usr/bin/env fish
echo 'Hello from Fish!'
Comments
# my comment
Printing text
echo 'Hello from Fish!'
# or
printf '%s\n' 'Hello from Fish!'
Print the string with a trailing \n.
Reading from stdin
read my_variable
Reads the string to a variable my_variable.
Loops
for i in (seq 1 10)
...
end
Variables
Defining and erasing
# Declare the global/local variable:
set my_variable 'Hello from Fish!'
i# Remove the variable:
set --erase my_variable
Slicing
echo $my_variable[1..10]
echo $my_variable[2..]
echo $my_variable[..-2]
Numbers
Incrementing and decrementing
set my_variable (math $my_variable + 1)
set my_variable (math $my_variable - 1)
Arithmetic
echo (math 1 + 2)
| Operator | Performs |
|---|---|
+ | Addition |
- | Subtraction |
* | Multiplication |
/ | Division |
% | Modulo |
^ | Exponentiation |
Strings
Matching
Match the string against a regular expression:
string match --regex --entire 'Fish' 'Hello from Fish!'
| Pattern | Matches |
|---|---|
x? | Zero or one x chars |
x* | Any count x chars |
x+ | One or more x chars |
x{n} | n times x chars |
x{n,m} | n to m times x chars |
x{n,} | n or more times x chars |
[xy] | x or y char |
[^xy] | not x or y char |
| --- | --- |
\w | Word character |
\d | Digit character |
\W | Not word character |
\D | Not digit character |
Perl compatible regular expressions are described here.
Replacing
# Replaces the first match
string replace --regex 'Fish' 'fish' 'Hello from Fish!'
# Replaces all matches
string replace --regex --all 'Fish' 'fish' 'Hello from Fish!'
Conditionals
If/else
if test $my_variable -lt $another_variable
···
else if test $my_variable -eq $another_variable
···
else
···
end
Comparisons
Numbers
| Number operator | Meaning |
|---|---|
-lt | [L]ess [t]han |
-eq | [Eq]ual |
-gt | [G]reater [t]han |
-le | [L]ess than or [e]qual to |
-ge | [G]reater than or [e]qual to |
-ne | [N]ot [E]qual |
Strings
| String operator | Meaning |
|---|---|
= | [Eq]ual |
!= | [N]ot [E]qual |
Files
| File operator | Meaning |
|---|---|
-f | [F]ile exists |
-d | [D]irectory exists |
-r | File or directory exists and [r]eadable |
-w | File or directory exists and [w]ritable |
-x | File or directory exists and e[x]ecutable |
Process communication
Writing to files
# Overwrite file
echo 'Hello from Fish!' > my_file
# Append to file
echo 'Hello from Fish!' >> my_file
Piping
my_command | another_command
Passes the first command stdout output as an input to a second command.
Command substitution
echo (math $my_variable + 1)
The (...) expression is substituted with the output of the command inside it.
Process substitution
echo (math $my_variable + 1 | psub)
The (... | psub) expression is substituted with a temporary file with the command's output.
Functions
Defining and erasing
# Declare the function
function my_function --description 'My description'
···
end
# Remove the function
functions --erase my_function
Events
Emitting
emit my_event
Emits an event that can be picked up by other functions.
Event handling
function my_hook --on-event my_event
···
end
Reacts to the my_event event.
Abbreviations
Defining and erasing
# Declare the abbreviation
abbr --add grh "git reset --hard HEAD"
# Remove the abbreviation
abbr --erase grh
Completions
Defining completions
complete --command mycommand --arguments 'install uninstall'
complete --command mycommand --short-option 'h' --long-option 'help' --description 'Display help'
| Option | Description |
|---|---|
--arguments | Arguments to the command itself or option |
--short-option | Short option |
--long-option | Long option |
--no-files | Don't suggest files |
--force-files | Suggest files |
--condition | Display the hint only when a given condition is true |
--description | Description |
Declares the completion for a command.
Removing completions
complete --command mycommand --erase
Useful built-in functions
| Function | Description |
|---|---|
__fish_seen_argument | Check whether the specified argument is used |
__fish_seen_subcommand_from | Check whether the specified subcommand is used |
__fish_use_subcommand | Check whether any subcommand is used |
| --- | --- |
__fish_complete_directories | Complete directories with the specified letters in their name |
__fish_complete_suffix | Complete files with the specified suffix |
| --- | --- |
__fish_complete_users | List all users |
__fish_complete_groups | List all user groups |
__fish_print_hostnames | List all host names |
__fish_complete_pids | List all PIDs |
__fish_print_filesystems | List all known filesystems |
__fish_print_interfaces | List all network interfaces |