![什么时候可以省略表示当前目录的点字符](https://linux22.com/image/83247/%E4%BB%80%E4%B9%88%E6%97%B6%E5%80%99%E5%8F%AF%E4%BB%A5%E7%9C%81%E7%95%A5%E8%A1%A8%E7%A4%BA%E5%BD%93%E5%89%8D%E7%9B%AE%E5%BD%95%E7%9A%84%E7%82%B9%E5%AD%97%E7%AC%A6.png)
我应该使用点来指示当前目录来访问目录还是应该仅将它用于文件?
例如,如果当前目录是foo
并且它包含bar
目录和baz.txt
文件,那么什么时候可以省略点字符?
./bar
./baz.txt
答案1
在需要文件路径的地方,./foo
相当于foo
.只有少数地方./foo
可以使用写作。
./foo
当期望的不一定是路径,而可能是可以在搜索路径中查找的文件名时,写入很有用。最常见的情况是调用可执行命令时。在列出的目录中搜索可执行程序PATH
多变的,但仅当给定的命令名称不包含斜杠时才会执行此查找。因此ls
调用ls
PATH 中找到的命令(通常是/bin/ls
),而调用当前目录中的./ls
可执行程序。ls
更一般地说,写入./foo
还会绕过任何 shell 别名、函数或名为 的内置函数foo
。
前缀的另一个用途./
是避免文件名以某些特殊字符开头的问题。特别是,当您将文件名作为参数传递给命令时,在大多数情况下,该命令允许以-
.如果文件名来自变量,您可能不确定文件名不是以-
.写入"./$filename"
而不是"$filename"
确保它不会被误解为一个选项(如果它以 开头)-
。然而,这仅在$filename
是相对路径(即不以 开头)时才有效/
。保护文件名的另一种更通用的方法是将它们放在--
命令行上:(mycommand -- "$filename"
通常--
表明后面的内容只是非选项参数)(但是,这在特定情况下并不总是有效:如果$filename
是-
,许多命令将意思是“标准输入”)。关于此主题,另请参阅为什么我的 shell 脚本会因为空格或其他特殊字符而卡住?和忘记在 bash/POSIX shell 中引用变量的安全隐患
答案2
好吧,如果您愿意,您可以省略文件夹的点字符,但两者都可以
cd ./bar
或者
cd bar
是等价的 - 但你会同意第二个更方便。
如果您想执行您的bar.txt
文件(例如可以执行该文件chmod 755
),那么您必须使用 ./ 指示符
./bar.txt
将执行脚本
bar.txt
什么也不做
cat bar.txt
或cat ./bar.txt
将做同样的事情。
希望有帮助:)
编辑:如果您想了解有关为什么需要 ./ 来运行脚本的更多信息,请按照以下步骤操作:https://stackoverflow.com/questions/6331075/why-do-you-need-dot-slash-before-script-name-to-run-it-in-bash
因为在 Unix 上,通常当前目录不在 $PATH 中。当您键入命令时,shell 会查找目录列表,如 PATH 变量指定的 > 。当前目录不在该列表中。
(@cnicutar)