Linux Shell:目录中的/和//有区别吗?
我正在用Shell制作这个小程序:Linux Shell:目录中的/和//有区别吗?,linux,shell,Linux,Shell,我正在用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 : dirNa
#***************************************************************
# 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 <string> fileName <string>
# Out values: returnCode <int>
#
# 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 <dirName> <fileName>"
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
}
在这两种情况下,代码似乎都有效为什么?我读到反斜杠就像一个空格。那么,我能把n反斜杠放在没有未知问题的地方吗
我可以就这样离开吗?否则会带来问题的?有区别吗?你认为这是正确的吗
额外问题:为什么我不能用负数返回?这是:返回-1没有区别
//=/没有区别
//=/原则上,您可以使用任意数量的
/
分隔符(直到您开始点击路径\u MAX
或其他硬限制):
您将遇到的一个问题是,如果您想测试两个路径是否相同[*],因为/usr/bin/less和/usr/bin//less是相同的路径,但是不同的字符串。在比较之前规范化路径可能很有用
[*]忽略不同路径可以引用同一对象的事实。原则上,您可以根据需要使用尽可能多的
/
分隔符(直到您开始点击PATH\u MAX
或其他硬限制):
您将遇到的一个问题是,如果您想测试两个路径是否相同[*],因为/usr/bin/less和/usr/bin//less是相同的路径,但是不同的字符串。在比较之前规范化路径可能很有用
[*]忽略不同路径可以引用同一对象的事实。
/
、/
或任何连续斜杠字符串根据POSIX标准具有相同的含义,但它们在路径开头可能具有不同的含义除外(因此/foo
和/foo
可能表示不同的对象)。Linux不使用此异常,因此任何数量的连续斜杠始终与单个/
的意思相同
(例外情况是为了满足使用前导
/
表示网络路径的其他类Unix系统的需要。)/
、/
或任何连续斜杠字符串根据POSIX标准具有相同的含义,但它们在路径开头可能具有不同的含义(因此/foo
和/foo
可能表示不同的对象).Linux不使用此异常,因此任何数量的连续斜杠始终表示与单个/
相同的内容
(例外情况是为了满足使用前导
/
表示网络路径的其他类Unix系统的需要。)在unix.stackexchange.com
中分别发布额外的问题谢谢,我在维基上读到了答案:unix退出状态限制为0-255,即无符号8位整数的范围。
。只询问是否有办法绕过此问题。我将在另一个问题中写入。在u中分别发布额外的问题nix.stackexchange.com
谢谢,我在维基上读到了答案:Unix退出状态限制为0-255,即无符号8位整数的范围
。只询问是否有方法绕过此问题。我将在另一个问题中写下它。谢谢。您是否建议我,在使用代码时,请确保我只放一个/
to清理代码。这是:如果我有两个或两个以上连续的/
,就用一个/
?在你看来,这是必要的吗?@Kani:使用单斜杠稍微安全一些,因为你不太可能点击路径MAX
。如果你输出路径供用户使用或当你将它们存储在某个地方时,这也会更好。这通常不是必要的,所以你自己决定。回答@PrinceJohnWesley:是的,或者,从这样开始。谢谢。你能建议我,对于代码,确保我只放一个/
来清理代码。这是:如果我有两个或更多连续的/
,用一个//code>替换它吗?在你看来,我这有必要吗?@Kani:使用单斜杠稍微安全一些,因为你不太可能点击PATH\u MAX
。如果你输出路径供用户使用或存储在某个地方,这也会更好。这通常不是真的必要,所以你自己决定。回答@PrinceJohnWesley:是的,或者,从这样开始。
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 //]
$ ls /usr/bin///////////////less
/usr/bin///////////////less