当前位置:  开发笔记 > 运维 > 正文

Shell:目录中的/和//之间有区别吗?

如何解决《Shell:目录中的/和//之间有区别吗?》经验,为你挑选了1个好方法。

我在Shell制作这个小程序:

#***************************************************************
# Function.
# NAME: chk_df
# Synopsis:
# Check if a local directory (dirName) exist and has a file (fileName).
# 
# 
# The return codes are the following:
# 99 : dirName does not exists
#  0 : dirName exists and has fileName
#  1 : dirName exists and has not fileName
#
# Parameters:
# In values: dirName  fileName 
# Out values: returnCode 
# 
# How to use:
# chk_df dirName fileName
#***************************************************************
chk_df(){
   # Check the number of arguments that could be passed.
   # In this case, two, dirName, fileNAme.
   if [[ ${#@} != 2 ]]; then
       echo "Error ...Use [Function]: chk_df  "
       echo "Ex: chk_df /foo lola.txt"
       exit
   fi   

   DIR=$1
   FILE=$2      

   [[ ! -d $DIR ]] && return 99
   [[ -d $DIR && ! -e $DIR/$FILE ]] && return 1
   [[ -d $DIR && -e $DIR/$FILE ]] && return 0

}

因为我需要检查一个文件是否在目录中,我做了这个(可怕的?)补丁$ DIR/$ FILE,但是这样的事情可能会发生:

I) If we do: chk_df /foo lola.txt
We get: /foo/lola.txt

II) If we do: chk_df /foo/ lola.txt
We get: /foo//lola.txt [Notice the //]

在这两种情况下,代码似乎都有效.为什么?我读到反斜杠就像一个空格.那么,我可以使用n反斜杠而不会出现未知问题吗?

我可以这样离开它还是会带来问题?有区别吗?UNIX以正确的方式假设它?

额外问题:为什么我不能用负数做回报?这是: 返回-1



1> Fred Foo..:

/,//,或连续的斜线任何串具有相同的含义根据POSIX标准,不同之处在于它们可以在一个路径的开始具有不同的含义(因此/foo//foo可以表示不同的对象).Linux不使用此异常,因此任何数量的连续斜杠总是意味着与单个相同/.

(例外是为了满足其他使用类似Unix的系统的需求,这些系统使用//表示网络路径.)

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有