readlink 文字与变量

readlink 文字与变量

使用 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 身份登录...

相关内容