Bash:中括弧から戻る

Bash:中括弧から戻る
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)}

内蔵またはechoreturn通事論観点からは違いはありません。したがって、以下が必要です。

{ 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
}

関連情報