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不存在的内容,从而出现错误消息。

相关内容