Unix变量最佳实践:包含路径的变量是否应以斜杠结尾
在unix系统上以文件名存储目录时,最佳做法是什么?目录路径应该以斜杠结尾吗 方法A 它允许您执行以下操作:Unix变量最佳实践:包含路径的变量是否应以斜杠结尾,unix,path,Unix,Path,在unix系统上以文件名存储目录时,最佳做法是什么?目录路径应该以斜杠结尾吗 方法A 它允许您执行以下操作: cd "$TMP$fileName" 方法B 这允许你做(用一个看起来不太干净的额外斜杠): 但也允许您执行以下操作: cd "$TMP/actualFileName" 我认为用第一种方法是不可能的 没关系。相反,在使用路径时,您应该通过添加您自己的路径,始终假定尾部斜杠不存在/foo//相当于/foo/,所以它是正确的。在正常使用中引用目录时,不包括斜杠:我的主目录是/home/a
cd "$TMP$fileName"
方法B
这允许你做(用一个看起来不太干净的额外斜杠):
但也允许您执行以下操作:
cd "$TMP/actualFileName"
我认为用第一种方法是不可能的 没关系。相反,在使用路径时,您应该通过添加您自己的路径,始终假定尾部斜杠不存在/foo//相当于/foo/,所以它是正确的。在正常使用中引用目录时,不包括斜杠:我的主目录是
/home/andy
,而不是/home/andy/
。如果您编写的脚本假定尾部斜杠在那里,那么您迟早会忘记包含它,并让自己大吃一惊
我不确定我是否同意你的观点,额外的斜杠“看起来不太干净”。当您不使用变量时,您希望用斜杠分隔目录名和文件名;当目录名存储在shell变量中时,我仍然觉得用斜线分隔部分读写是很自然的。当你在一个有100多个脚本、大量库和可执行文件的大型应用程序上工作时,你开始更担心什么会减少痛苦,而不是什么“看起来不太干净”。我同意双斜杠看起来很有趣,但现实是Unix并不在乎。我宁愿假设尾随斜杠不存在,并且知道当我自己添加一个时它仍然有效,而不是希望每个人都记得包含一个,然后当其他人忘记添加尾随斜杠时,我的代码就会中断
把你自己置于一种情况下,你可以控制你的代码是否能工作。依赖他人遵守约定会导致头痛和凌晨3点的支持呼叫,而他们不可避免地不这样做。如果有一件事很重要,那就是在你编写代码时保持一致。
TMP='/TMP/pasteTmp/';cd“${TMP}actualfilename”
请注意,有些实用程序(例如,rsync
,或ls
对目录符号链接的处理)后面的斜杠很重要(即导致不同的行为)。根据您正在做的事情,您可能必须在特定情况下考虑这一点。
TMP="/tmp/pasteTmp"
cd "$TMP/$fileName"
cd "$TMP/actualFileName"