\section function function - create a function \subsection function-synopsis Synopsis <code>function [OPTIONS] NAME; BODY; end </code> \subsection function-description Description - \c -b or \c --key-binding specifies that the function is a key biding. Key binding functions work exactly like regular functions except that they can not be tab-completed, and may contain the '-' character. - <code>-d DESCRIPTION</code> or \c --description=DESCRIPTION is a description of what the function does, suitable as a completion description - <code>-j PID</code> or <code> --on-job-exit PID</code> tells fish to run this function when the job with group id PID exits. Instead of PID, the string 'caller' can be specified. This is only legal when in a command substitution, and will result in the handler being triggered by the exit of the job which created this command substitution. - <code>-p PID</code> or <code> --on-process-exit PID</code> tells fish to run this function when the fish child process with process id PID exits - <code>-s</code> or <code>--on-signal SIGSPEC</code> tells fish to run this function when the signal SIGSPEC is delivered. SIGSPEC can be a signal number, or the signal name, such as SIGHUP (or just HUP) - <code>-v</code> or <code>--on-variable VARIABLE_NAME</code> tells fish to run this function when the variable VARIABLE_NAME changes value This builtin command is used to create a new function. A function is a list of commands that will be executed when the name of the function is entered. The function <pre> function hi echo hello end </pre> will write <code>hello</code> whenever the user enters \c hi. If the user enters any additional arguments after the function, they are inserted into the environment <a href="index.html#variables-arrays">variable array</a> argv. \subsection function-example Example <pre>function ll ls -l $argv end </pre> will run the \c ls command, using the \c -l option, while passing on any additional files and switches to \c ls. <pre> function mkdir -d "Create a directory and set CWD" mkdir $argv if test $status = 0 switch $argv[(count $argv)] case '-*' case '*' cd $argv[(count $argv)] return end end end </pre> will run the mkdir command, and if it is successful, change the current working directory to the one just created.