![bash - 使用环境变量使用 exec 作为文件描述符](https://linux22.com/image/140805/bash%20-%20%E4%BD%BF%E7%94%A8%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F%E4%BD%BF%E7%94%A8%20exec%20%E4%BD%9C%E4%B8%BA%E6%96%87%E4%BB%B6%E6%8F%8F%E8%BF%B0%E7%AC%A6.png)
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
不存在的内容,从而出现错误消息。