使用 BASH:答案可能很明显,但不适合我。
> echo $PWD
/root/fcm
> readlink -f ~
/root
> # but then with a variable or literal
> a='~'
> readlink -f $a
/root/fcm/~
> readlink -f "~"
/root/fcm/~
我期望只收到 '/root/';
谁在替换 bash 或 readlink?
答案1
shell 进行波形符扩展。readlink
没有。Bash 不会在引号内扩展波形符。
readlink -f $a
不会执行您想要的操作,因为波浪号扩展发生在变量扩展之前,即变量扩展为~
,但波浪号不会进一步扩展。
Bash 执行操作的顺序是:大括号扩展、波形符扩展、参数和变量扩展、命令替换、算术扩展、分词和路径名扩展。
在某些情况下,使用$HOME
可能比使用波形符更好,因为它的行为与任何其他变量一样。
另外,请不要以 root 身份登录...