将 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
的建议。
谢谢!
假设我是 运行 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
的建议。
谢谢!