user@sv7280:~$ return
bash: return: can only `return' from a function or sourced script
user@sv7280:~$ { return }
>
何が起こっていますか?>
ここでプロンプトとは何を意味し、{ return }
どこに移動しますか?
答え1
>
$PS2
コマンドはまだ完了しておらず、完了するには追加の入力が必要であることを知らせるシェルのプロンプトです。
Bashで次のことを行います。
echo }
出力されるのがわかります}
。
{
コマンドグループを開始するキーワード。
{ echo }
{
上記のキーワードの後には、シェルが実行を開始する前にecho }
endキーワードを待っています。}
このキーワードは、改行文字(または...などの文字)}
で前のコマンドと区別する必要があります。;
&
{(echo)}
内蔵またはecho
return
通事論観点からは違いはありません。したがって、以下が必要です。
{ return; }
ただし、これはreturn
関数内で呼び出されないため、エラーが発生します。
Bourneなどのシェルで関数を定義するには、まだfuncname()
コマンドの前に来る必要があります。の場合、コマンドは、、、bash
...(subshell)
などの複合コマンドのみ可能です。{ command group; }
for ...; do ...; done
したがって、以下が必要です。
myfunc() { return; echo not reached; }; myfunc
または:
myfunc() for i in 1 2; do echo "$i"; return; done; myfunc
関数に加えて、return
ソーススクリプトから関数を呼び出すことも可能なので、関数を定義せずに一連のコマンドから返すことができるようにするには、次のようにします。
source /dev/fd/3 3<< 'EOF'
echo foo
return 123
echo not reached
EOF
代わりに、exit
サブシェルを使用することもできますreturn
。
(
echo foo
exit 123
echo not reached
)
(もちろん、このコマンドはサブシェル環境で実行されます)
ではzsh
匿名関数を使用することもできます。
() {
echo foo
return 123
echo not reached
}