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

时间:2015-02-25 21:58:00

标签: bash escaping command-substitution tilde-expansion variable-subsitution

说我以root身份运行bash,我想要用户ada的主目录。另请注意,ada存储在名为$USER的变量中(因为我是从脚本执行此操作)。

当我尝试以下操作时,

chown -R $USER:$USER ~$USER

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

有没有办法用嵌套的子句和正确的转义来做到这一点?

2 个答案:

答案 0 :(得分:3)

Tilde扩展很棘手,不适用于那样的变量。

一种方法是使用eval

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

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

答案 1 :(得分:0)

我在这里受伤是因为我有种问题。

我想到了:

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

但是我更喜欢基于anubhava的eval的建议。

谢谢!