我的脚本中有这些变量:
TARGET=username
TARGET_DIR="~${TARGET}/.ssh"
我希望TARGET_DIR
var 保持这条路径:/home/username/.ssh
但使用~
而不是/home/
. 但是当我运行脚本并尝试.ssh
在用户名下创建新目录时,它告诉我:
mkdir: cannot create directory ‘~username/.ssh’: No such file or directory
即使 /home/username 目录存在。如果我这样做: TARGET_DIR="/home/${TARGET}/.ssh"
它有效。如何~
在变量中使用符号?
在
bash
,ash
和tilde 扩展发生在参数扩展之前mksh
,yash
因此无法正常工作。您可以在此处使用
ksh93
orzsh
代替,或求助于eval
:如果你的系统有一个
getent
命令(现在很常见),你也可以使用:或使用
perl
:这也适用于用户名中具有不常见字符的用户(例如 zsh 的
~$user
而不是ksh93
's~"$user"
也会有问题的空间)。