Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix变量最佳实践:包含路径的变量是否应以斜杠结尾_Unix_Path - Fatal编程技术网

Unix变量最佳实践:包含路径的变量是否应以斜杠结尾

Unix变量最佳实践:包含路径的变量是否应以斜杠结尾,unix,path,Unix,Path,在unix系统上以文件名存储目录时,最佳做法是什么?目录路径应该以斜杠结尾吗 方法A 它允许您执行以下操作: cd "$TMP$fileName" 方法B 这允许你做(用一个看起来不太干净的额外斜杠): 但也允许您执行以下操作: cd "$TMP/actualFileName" 我认为用第一种方法是不可能的 没关系。相反,在使用路径时,您应该通过添加您自己的路径,始终假定尾部斜杠不存在/foo//相当于/foo/,所以它是正确的。在正常使用中引用目录时,不包括斜杠:我的主目录是/home/a

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

方法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"