Linux ShellScript 1:[:[:意外运算符

Linux ShellScript 1:[:[:意外运算符,linux,file,shell,text,compare,Linux,File,Shell,Text,Compare,我遇到了一个无法解决的问题。这可能是语法问题,我已经尝试了很多解决方案,但没有解决问题 我尝试使用括号..如果没有括号,我仍然在控制台上遇到此错误: 1: [: [: unexpected operator 有人能帮我吗? 这是我的密码: if [ [ cmp --silent 1.fsa 1_.fsa ] returns any ]; then echo "Files are different!" else echo "Files are identical!" fi 顺便说一下,

我遇到了一个无法解决的问题。这可能是语法问题,我已经尝试了很多解决方案,但没有解决问题

我尝试使用括号..如果没有括号,我仍然在控制台上遇到此错误:

1: [: [: unexpected operator
有人能帮我吗? 这是我的密码:

if [ [ cmp --silent 1.fsa 1_.fsa ] returns any ]; then
  echo "Files are different!"
else
 echo "Files are identical!"
fi
顺便说一下,我试图比较ShellScript中的两个文件,如果它们相同,我想说: “文件完全相同!” 否则我想说:“文件是不同的!”


非常感谢!请不要使用括号

if cmp -s 1.fsa 1_.fsa; then
  echo "Files are identical!"
else
  echo "Files are different!"
fi
[]
运行一个名为
test
的命令。如果您阅读
mantest
,您会发现它根本不理解“returnany”的意思;它也不希望看到传递给它的
[

那么,您得到的文字错误是:

[: [: unexpected operator

表示
[
命令(aka test)抱怨它不希望作为参数传递。

根本不使用括号

if cmp -s 1.fsa 1_.fsa; then
  echo "Files are identical!"
else
  echo "Files are different!"
fi
[]
运行一个名为
test
的命令。如果您阅读
mantest
,您会发现它根本不理解“returnany”的意思;它也不希望看到传递给它的
[

那么,您得到的文字错误是:

[: [: unexpected operator

表示
[
命令(aka test)抱怨它不希望作为参数传递。

根本不使用括号

if cmp -s 1.fsa 1_.fsa; then
  echo "Files are identical!"
else
  echo "Files are different!"
fi
[]
运行一个名为
test
的命令。如果您阅读
mantest
,您会发现它根本不理解“returnany”的意思;它也不希望看到传递给它的
[

那么,您得到的文字错误是:

[: [: unexpected operator

表示
[
命令(aka test)抱怨它不希望作为参数传递。

根本不使用括号

if cmp -s 1.fsa 1_.fsa; then
  echo "Files are identical!"
else
  echo "Files are different!"
fi
[]
运行一个名为
test
的命令。如果您阅读
mantest
,您会发现它根本不理解“returnany”的意思;它也不希望看到传递给它的
[

那么,您得到的文字错误是:

[: [: unexpected operator

这意味着
[
命令(aka test)抱怨它不希望作为参数传递。

我找到了这个解决方案:

if diff file1 file2 >/dev/null ; then
  echo Same
else
  echo Different
fi
但是有人能说我的实现出了什么问题吗?
谢谢;)

我找到了这个解决方案:

if diff file1 file2 >/dev/null ; then
  echo Same
else
  echo Different
fi
但是有人能说我的实现出了什么问题吗?
谢谢;)

我找到了这个解决方案:

if diff file1 file2 >/dev/null ; then
  echo Same
else
  echo Different
fi
但是有人能说我的实现出了什么问题吗?
谢谢;)

我找到了这个解决方案:

if diff file1 file2 >/dev/null ; then
  echo Same
else
  echo Different
fi
但是有人能说我的实现出了什么问题吗?
谢谢;)

使用
cmp
速度更快,内存效率更高;使用
diff
可能会工作,但这绝对不是正确的做法。好的,我将介绍您的其他实现,顺便说一句,感谢您对性能的反馈;)了解性能不同的原因--
cmp-s
不需要计算如果文件大小不同,它根本不需要查找内容中的不匹配项,只需立即短路即可。最坏的情况是,它会同时读取两个文件,O(2n)相比之下,
diff
,实际上需要读取两个文件并计算最短距离路径来将一个文件转换为另一个文件——这是一种在O(n^3)附近具有最坏情况行为的算法如果内存可用。使用
cmp
会更快、内存效率更高;使用
diff
可能会工作,但这绝对不是正确的做法。好的,我将介绍您的其他实现,顺便说一句,感谢您对性能的反馈;)以了解性能不同的原因--
cmp-s
不需要l计算事物是如何不同的,这样一旦发现任何差异,它就可以立即退出。(如果文件大小不同,它根本不需要在内容中查找不匹配的内容,并且可以立即在那里短路)。最坏的情况是,它读取两个文件,O(2n)相比之下,
diff
,实际上需要读取两个文件并计算最短距离路径来将一个文件转换为另一个文件——这是一种在O(n^3)附近具有最坏情况行为的算法如果内存可用。使用
cmp
会更快、内存效率更高;使用
diff
可能会工作,但这绝对不是正确的做法。好的,我将介绍您的其他实现,顺便说一句,感谢您对性能的反馈;)以了解性能不同的原因--
cmp-s
不需要l计算事物是如何不同的,这样一旦发现任何差异,它就可以立即退出。(如果文件大小不同,它根本不需要在内容中查找不匹配的内容,并且可以立即在那里短路)。最坏的情况是,它读取两个文件,O(2n)相比之下,
diff
,实际上需要读取两个文件并计算最短距离路径来将一个文件转换为另一个文件——这是一种在O(n^3)附近具有最坏情况行为的算法如果内存可用。使用
cmp
会更快、内存效率更高;使用
diff
可能会工作,但这绝对不是正确的做法。好的,我将介绍您的其他实现,顺便说一句,感谢您对性能的反馈;)以了解性能不同的原因--
cmp-s
不需要l计算事物是如何不同的,这样一旦它看到任何差异,它就可以立即退出。(如果文件大小不同,它根本不需要查看内容中是否存在不匹配,并且可以立即在那里短路)。最坏的情况是,它同时读取两个文件,O(2n)。
diff
,相反,它需要实际读取两个文件和