我怎样才能让 bash 解释器解释 ~ 字符?

我怎样才能让 bash 解释器解释 ~ 字符?

作为主目录?

我尝试了下面所有 3 种方法,但只是回显了 ~。

NAME="~/_root/repo/"

echo $NAME
echo "$NAME"
echo "${NAME}

答案1

通过删除赋值语句中的引号,让 shell 在将 ~ 分配给 NAME 之前将其扩展。

NAME=~/_root/repo/
echo "$NAME"

答案2

没有函数可以实现这一点。字符串中的波浪号只是一个波浪号。您必须手动匹配并将其替换为 $HOME 的值:

var=${var}/
var=${var/#"~/"/"$HOME/"}
var=${var%/}

如果你使用“eval”,它会解释一切– 它扩展了波浪号,还扩展了通配符,还扩展了变量替换,还解析了空格、引号、数组语法等等。

var="~/dir/file.txt"
eval "var=$var"

var="~/dir with spaces/file.txt"
eval "var=$var"

var="~/dir/file (1).txt"
eval "var=$var"

相关内容