回答:
の関数はbash
、本質的に複合コマンド(またはコードブロック)という名前です。からman bash
:
Compound Commands
A compound command is one of the following:
...
{ list; }
list is simply executed in the current shell environment. list
must be terminated with a newline or semicolon. This is known
as a group command.
...
Shell Function Definitions
A shell function is an object that is called like a simple command and
executes a compound command with a new set of positional parameters.
... [C]ommand is usually a list of commands between { and }, but
may be any command listed under Compound Commands above.
理由はありません。それは単なる構文です。
指定された1行関数のリストは改行やa ;
で終了していないため、bash
文句を言います。
;
関数の最後に必要なものがあります:
list(){ ls -a ; }
動作するはずです。
bashの関数定義の構文は次のように指定されます
name () { list ; }
の;
一部ではないが含まれていることに注意してくださいlist
。
ことを;
この場所で必要とされる異常な構文の一種です。これはbash
特定のものではなく、と同じですがksh
、;
では必須ではありませんzsh
。
単一のコマンドの終わり( ";")は、改行によって暗示されます。onelineバージョンで}
は、終了していないls -a
コマンドの引数として解析されます。あなたがそうすれば見ることができます:
$ foo(){ echo "a" }
}
$ foo
a }
関数宣言内のコマンドが末尾の中括弧をどのように飲み込むかを見てください。