什么时候可以省略表示当前目录的点字符

什么时候可以省略表示当前目录的点字符

我应该使用点来指示当前目录来访问目录还是应该仅将它用于文件?

例如,如果当前目录是foo并且它包含bar目录和baz.txt文件,那么什么时候可以省略点字符?

./bar
./baz.txt

答案1

在需要文件路径的地方,./foo相当于foo.只有少数地方./foo可以使用写作。

./foo当期望的不一定是路径,而可能是可以在搜索路径中查找的文件名时,写入很有用。最常见的情况是调用可执行命令时。在列出的目录中搜索可执行程序PATH多变的,但仅当给定的命令名称不包含斜杠时才会执行此查找。因此ls调用lsPATH 中找到的命令(通常是/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.txtcat ./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)

相关内容