【问题标题】:Unix variable best practice: Should variable containing a path end in a slashUnix 变量最佳实践:包含路径的变量是否应以斜杠结尾
【发布时间】:2011-02-11 06:11:20
【问题描述】:

在 unix 系统上以文件名存储目录时的最佳做法是什么?目录路径应该以斜杠结尾吗?

方法A

TMP="/tmp/pasteTmp/"

允许你这样做:

cd "$TMP$fileName"

方法B

TMP="/tmp/pasteTmp"

这允许你这样做(带有一个看起来不太干净的额外斜线):

cd "$TMP/$fileName"

但也允许你这样做:

cd "$TMP/actualFileName"

我认为使用第一种方法是不可能的。

【问题讨论】:

  • TMP='/tmp/pasteTmp/'; cd "${TMP}actualfilename"
  • 请注意,有些实用程序(例如 rsyncls 对目录符号链接的处理)尾部斜杠很重要(即导致不同的行为)。根据您正在做的事情,您可能必须在特定情况下考虑到这一点。

标签: unix path


【解决方案1】:

没关系。相反,您应该始终假设通过添加自己的路径使用路径时不存在尾部斜杠。 /foo// 等价于 /foo/ 所以可以解决。

【讨论】:

  • 如果有一件事很重要,那就是当你是编写代码的人时保持一致
【解决方案2】:

当您引用正常使用的目录时,不包括斜杠:我的主目录是/home/andy,而不是/home/andy/。如果您编写的脚本假定尾部斜线存在,那么您迟早会忘记包含它并让自己感到惊讶。

我不确定我是否同意你的看法,即额外的斜线“看起来不太干净”。当您不使用变量时,您希望用斜杠分隔目录和文件名;当目录名称存储在 shell 变量中时,我仍然发现使用斜线分隔各个部分很自然。

【讨论】:

    【解决方案3】:

    当您使用具有 100 多个脚本以及大量库和可执行文件的大型怪物应用程序工作时,您开始更多地担心会导致更少痛苦的原因,而不是“看起来不那么干净”的原因。我同意双斜杠看起来很有趣,但现实是 Unix 不在乎。我宁愿假设斜杠不存在并且知道当我自己添加一个斜杠时它仍然可以工作,而不是希望每个人都记得包含一个斜杠,然后当其他人忘记添加斜杠时我的代码会中断。

    让自己处于可以控制自己的代码是否可以工作的境地。依赖其他人遵守约定会导致头疼,而当他们不可避免地不遵守约定时,他们会在凌晨 3 点致电支持。

    【讨论】:

      猜你喜欢
      • 2021-11-06
      • 2011-08-28
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      • 1970-01-01
      • 2021-05-13
      • 2018-10-22
      相关资源
      最近更新 更多