bash - 環境変数を使用してexecをファイル記述子として使用する

bash - 環境変数を使用してexecをファイル記述子として使用する
LOCK_FD=200
LOCK_FILE=/tmp/lock-file
exec ${LOCK_FD}>${LOCK_FILE}

エラーが発生しました。

exec: 200 not found

しかし、これはうまくいきます

LOCK_FD=200
LOCK_FILE=/tmp/lock-file
eval "exec ${LOCK_FD}>${LOCK_FILE}"

理由をご存知ですか?

ベストアンサー1

変数が拡張される前にリダイレクトが行われるためです。man bashどちらが最初に完了したかはわかりません。

リダイレクトコマンドが実行される前に、対応する入力と出力がリダイレクトされることがあります。 。 。

EXPANSION拡張は、コマンドラインが単語に分割された後に実行されます。

リダイレクトを完了して削除した後、存在しないジョブをexec実行しようとするとエラーメッセージが表示されます。200

おすすめ記事