我在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: dirNamefileName # 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
/
,//
,或连续的斜线任何串具有相同的含义根据POSIX标准,不同之处在于它们可以在一个路径的开始具有不同的含义(因此/foo
和//foo
可以表示不同的对象).Linux不使用此异常,因此任何数量的连续斜杠总是意味着与单个相同/
.
(例外是为了满足其他使用类似Unix的系统的需求,这些系统使用//
表示网络路径.)