在bash中将波浪形展开与变量替换相结合



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

当我尝试以下内容时,

chown -R $USER:$USER ~$USER

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

有没有一些方法可以通过嵌套的替换和适当的转义来做到这一点?

Tilde展开很棘手,不能处理这样的变量。

一种方法是使用eval:

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

但是要确保USER变量不是来自不可信的来源。

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

我想出了:

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

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

谢谢!

相关内容

  • 没有找到相关文章

最新更新