Bash 无法以交互方式扩展反引号

Bash 无法以交互方式扩展反引号

在 RHEL5.2 (bash 2.3.25) 上,我可以使用 cd `pwd`/[TAB] 并将 pwd 替换到我当前的工作目录中,使用 pwd(1) 的输出。

如何在 Ubuntu 9.10(bash 4.0.33)中实现相同的功能。

我读过之前的问题,其中提到反引号已经过时且已弃用。我不知道这一点。我可以理解嵌套它们可能很困难,而且我使用 ${} 是脚本,但我希望能够在 shell 中以交互方式评估命令。

答案1

这是一个功能,而不是一个错误。

以这样的方式思考一下这个场景:为了完成这个任务,shell 必须在反引号中运行该命令。如果该命令不打算多次运行,或者执行时间很长,等等,那么这可能会造成非常严重的负面后果。

为了进行扩展,bash 只需要一个字符串路径,而不是为了得到完整的字符串而必须执行的某个程序。考虑一下建议建议将其用作./当前工作目录的路径!

反引号并不过时或被弃用,尽管$()现在人们普遍更喜欢较新的语法。然而,在您的示例中,使用命令是不明智的。反引号和命令应谨慎使用,并且仅在无法使用其他语法时才使用。

答案2

尝试

光盘 。/TAB

反而。

cd $VAR/...
cd $(cmd)/...

对我来说也不起作用。也许你可以比较一下 /etc/bash_completion 文件。

答案3

有些情况下需要使用“$PWD/”而不是“./”,因此不建议总是使用“./”代替“$PWD/”。一个例子是当您进行符号链接时。

假设您位于 /somefolder。现在运行以下命令:

ln -s ./file /target/file

这将成为无效链接。你真正需要做的是:

ln -s $PWD/file /target/file

输入整个路径非常低效。这个问题与“弃用”问题无关,因为符号链接无法以这种方式工作。因此,我建议您提交错误来修复此问题。

相关内容