「if」からジョブをバックグラウンドに送信する

「if」からジョブをバックグラウンドに送信する

なぜこれですか?

if true; then sleep 3 &; fi
bash: syntax error near unexpected token `;'

走りたい

sleep 3

コマンド["sleep 3"は単にイエス]が"並列"で実行され、より早く完了するようにバックグラウンドで実行されます。しかし、私はこれを得ます:

bash: syntax error near unexpected token `;'

エラーメッセージ。なぜ?ジョブをバックグラウンドで送信できないのはなぜですか?

答え1

これはすでにステートメント区切り文字であるため、後に入れない&でください。;

答え2

この場合、コマンドを分離する必要はないようです(&自分で分離)。

例えば。

$> if true; then (sleep 3; echo ok) &  fi
[1] 14224
$> ok

答え3

複数行で書いてみてください。

if true; then
  sleep 3 &
fi

関連情報