我是否应该在 shell 脚本中的路径变量末尾使用斜杠?

我是否应该在 shell 脚本中的路径变量末尾使用斜杠?

今天在写shell脚本的时候。

我突然想到一个问题。

因为两者cd /target_dircd /target_dir/有效。
我应该在 shell 脚本中的路径变量末尾添加斜杠吗?
比如LOG_PATH=/data/nginx/logsLOG_PATH=/data/nginx/logs/

我在谷歌上做了一些粗略的搜索,但没有找到关于这个的讨论,也许它太基础了?

目前,我真的很难决定选择哪种风格。
但我LOG_PATH=/target_dir/更喜欢风格一点。
因为当我用 bash 进行自动完成时,它会用斜杠弹出结果。

对此你有何看法,为什么?

答案1

根据 POSIX:

路径名的定义:

用于标识文件的字符串。它有可选的开头<斜线>字符,后跟零个或多个文件名,由<斜线>人物。路径名可以选择包含一个或多个尾随<斜线>人物。多次连续<斜线>字符被认为是相同的<斜线>,除了恰好两个前导的情况<斜线>人物。

答案2

为了安全起见,请包含斜线。连接路径时这可能会导致出现多个斜杠,但至少可以避免出现问题。

几个例子:rsync如果包含尾部斜杠,则以不同方式对待路径(它同步目录而不是创建另一个子目录)。当目录的符号链接没有尾部斜杠时,有时会以意想不到的方式运行 - 至少 shell 完成会变得混乱。您永远不知道您调用的命令/脚本是否依赖于检查斜杠是否有某些特殊行为。它甚至可以避免您覆盖某些内容。例如,如果您有一个名为 的文件foo,但您错误地认为它是一个目录并想要在其中移动某些内容,那么mv bar foo将覆盖该文件(数据丢失,潜在的灾难),但mv bar foo/只会抱怨并且不执行任何操作。

所以总而言之,大多数情况下这并不重要,但您应该使用斜杠来保护自己,并且让人类读者更清楚您打算在脚本中做什么。如果一个变量以斜线结尾,一个不经意的观察者会立即确定它引用的是一个目录,并且如果需要修改它,会正确使用它。

答案3

不,你不应该这么做。它添加了一个不必要的斜线 ( /)。

例子

假设你想将 java 的bin目录导出到你的PATH变量中,

export PATH=$PATH:/opt/jre1.7.0_45/bin/

现在检查一下,

user@host:~$ which java
/opt/jre1.7.0_45/bin//java

注意java前面的额外斜杠(/),幸运的是它只适用于这种情况。

相关内容