From Fedora Project Wiki

Fish 3.0


Update Fish to 3.0.


  • Name: Igor Gnatenko
  • Email:
  • Release notes owner:

Current status

Detailed Description

Not only update it in F30 but also provide new version as opt-in for F28 and F29.

Benefit to Fedora

The new version of Fish has quite some number of bugfixes, features and performance improvements.


  • Proposal owners: Put fish 3.0 into a module (that means it will be available for F28 and F29) and mark it as default in Rawhide.
  • Other developers: N/A (not a System Wide Change)
  • Release engineering: #8077 (a check of an impact with Release Engineering is needed)
  • Policies and guidelines: N/A (not a System Wide Change)
  • Trademark approval: N/A (not needed for this Change)

Upgrade/compatibility impact

  • Process and job expansion has largely been removed. % will no longer perform these expansions, except for %self for the PID of the current shell. Additionally, job management commands (disown, wait, bg, fg and kill) will expand job specifiers starting with % (#4230, #1202).
  • set x[1] x[2] a b, to set multiple elements of an array at once, is no longer valid syntax (#4236).
  • A literal {} now expands to itself, rather than nothing. This makes working with find -exec easier (#1109, #4632).
  • Literally accessing a zero-index is now illegal syntax and is caught by the parser (#4862). (fish indices start at 1)
  • Successive commas in brace expansions are handled in less surprising manner. For example, {,,,} expands to four empty strings rather than an empty string, a comma and an empty string again (#3002, #4632).
  • for loop control variables are no longer local to the for block (#1935).
  • Variables set in if and while conditions are available outside the block (#4820).
  • Local exported (set -lx) vars are now visible to functions (#1091).
  • The new math builtin (see below) does not support logical expressions; test should be used instead (#4777).
  • Range expansion will now behave sensibly when given a single positive and negative index ($foo[5..-1] or $foo[-1..5]), clamping to the last valid index without changing direction if the list has fewer elements than expected.
  • read now uses -s as short for --silent (à la bash); --shell's abbreviation (formerly -s) is now -S instead (#4490).
  • cd no longer resolves symlinks. fish now maintains a virtual path, matching other shells (#3350).
  • source now requires an explicit - as the filename to read from the terminal (#2633).
  • Arguments to end are now errors, instead of being silently ignored.
  • The names argparse, read, set, status, test and [ are now reserved and not allowed as function names. This prevents users unintentionally breaking stuff (#3000).
  • The fish_user_abbreviations variable is no longer used; abbreviations will be migrated to the new storage format automatically.
  • The FISH_READ_BYTE_LIMIT variable is now called fish_byte_limit (#4414).
  • Environment variables are no longer split into arrays based on the record separator character on startup. Instead, variables are not split, unless their name ends in PATH, in which case they are split on colons (#436).
  • The history builtin's --with-time option has been removed; this has been deprecated in favor of --show-time since 2.7.0 (#4403).
  • The internal variables __fish_datadir and __fish_sysconfdir are now known as __fish_data_dir and __fish_sysconf_dir respectively.

How To Test

0. Make sure to have modular repositories enabled 1. Run dnf module install fish:3 2. Try out normal workload in fish

User Experience

  • fish now supports && (like and), || (like or), and ! (like not), for better migration from POSIX-compliant shells (#4620).
  • fish may be started in private mode via fish --private. Private mode fish sessions do not have access to the history file and any commands evaluated in private mode are not persisted for future sessions. A session variable $fish_private_mode can be queried to detect private mode and adjust the behavior of scripts accordingly to respect the user's wish for privacy.
  • A new wait command for waiting on backgrounded processes (#4498).
  • alias has a new --save option to save the generated function immediately (#4878).
  • funced has a new --save option to automatically save the edited function after successfully editing (#4668).
  • history search supports globs for wildcard searching (#3136) and has a new --reverse option to show entries from oldest to newest (#4375).
  • set has new --append and --prepend options (#1326).
  • set has a new --show option to show lots of information about variables (#4265).
  • string match with an empty pattern and --entire in glob mode now matches everything instead of nothing (#4971).
  • string split supports a new --no-empty option to exclude empty strings from the result (#4779).
  • string has new subcommands split0 and join0 for working with NUL-delimited output.
  • string no longer stops processing text after NUL characters (#4605)
  • string escape has a new --style regex option for escaping strings to be matched literally in string regex operations.
  • test now supports floating point values in numeric comparisons.
  • Pressing Ctrl-C while running a script now reliably terminates fish (#5253).

See for more.


N/A (not a System Wide Change)

Contingency Plan

  • Contingency mechanism: (What to do? Who will do it?) N/A (not a System Wide Change)
  • Contingency deadline: N/A (not a System Wide Change)
  • Blocks release? N/A (not a System Wide Change), Yes/No
  • Blocks product? product


Release Notes