将 bash 中的波浪号扩展与变量替换相结合

combining tilde expansion with variable substitution in bash

假设我是 运行 bash root,我想 chown 用户 ada 的主目录。还要说 ada 存储在一个名为 $USER 的变量中(因为我是从脚本中执行此操作的)。

当我尝试以下操作时,

chown -R $USER:$USER ~$USER

shell 首先执行波浪号扩展,因此它尝试 chown /home/root/ada,而不是 /home/ada

有没有办法用嵌套替换和适当的转义来做到这一点?

波浪号扩展很棘手,不适用于这样的变量。

一种方法是使用 eval:

chown -R $USER:$USER $(eval echo ~"$USER")

但请确保您的 USER 变量不是来自不受信任的来源。

我来到这里是因为我遇到了那种问题。

我想到了:

chown -R $USER:$USER $(getent passwd $USER | awk -F: '{print }')

但我更喜欢 anubhava 的(有点吓人)基于 eval 的建议。

谢谢!