Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.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
Linux 双for循环与bash编程_Linux_Bash_Ubuntu - Fatal编程技术网

Linux 双for循环与bash编程

Linux 双for循环与bash编程,linux,bash,ubuntu,Linux,Bash,Ubuntu,我想用bash编程做一些类似的事情 for file_x in file1, file2, file3, etc... for file_y in file1, file2, file3, etc... if file_y != file_x do something 有什么建议吗 如果要进行NxN比较,只对内部循环中列表的尾部进行操作是有意义的。差不多 #!/bin/bash for file_x in "file1" "file2" "file3" do

我想用bash编程做一些类似的事情

for file_x in file1, file2, file3, etc...  
  for file_y in file1, file2, file3, etc...  
    if file_y != file_x
      do something 

有什么建议吗

如果要进行NxN比较,只对内部循环中列表的尾部进行操作是有意义的。差不多

#!/bin/bash

for file_x in "file1" "file2" "file3"
do  
  for file_y in "file1" "file2" "file3"
  do
    if cmp -q "$file_y" "$file_x"
    then
         echo "$file_y $file_x are equal"
    else
         echo "$file_y $file_x are not equal"
    fi
  done
done
#!/bin/bash

files=(foo bar baz quux)

for ((i=0; i<${#files[@]}-1; i++)); do
  for ((j=i+1; j<${#files[@]}; j++)); do
    maybe=""
    cmp -s "${files[$i]}" "${files[$j]}" || maybe=" not"
    echo "${files[$i]} and ${files[$j]} are$maybe equal"
  done
done

你需要什么样的提示?您的代码几乎完全正确;你只需要添加;dos到您的行的末尾,a;然后在if结束时,去掉do before某物…如果在shell中运行help for和help if来查看每一个的语法,并遵循该语法,那么嵌套循环或条件语句就没有什么特别的了;如果不是嵌套的话,它的语法是100%完全相同的。问题是file1、file2等是相同的吗?将它们隐藏在一个数组中:files=file1 file2 file3;对于${files[@]}中的文件_x;${files[@]}中的文件y的do;但无论如何,所有这些都将在语言介绍中介绍。StackOverflow是一个当你陷入困境时可以去的地方——当你还没有尝试过任何参考资料时,它不是第一个可以去的地方。我建议在您第一次阅读了一些文档,对语法有了一个基于非猜测的想法之后,再看看更自动化的kibiting。如果你有一些你认为应该根据文档和shellcheck工作的东西,请回到这里。需要更多的报价。此外,在我看来,对名称进行比较实际上是出于用户的意图,以避免在两个列表中都存在相同的目录条目时对其自身进行操作,而不是基于内容的比较……但无论如何,如果file1实际上是hello world.txt,那么cmp$file_y。。。不会把它当作一个单独的参数,而是把它分解成hello和Word…txt……并且如果你要使用CMP,考虑CMP -Q——这样它就不会向STDUT发出任何结果,并且一旦找到第一个不相等的字节,它就会退出,而不是继续比较它已经知道的两个不匹配的文件。如果文件大小不同,cmp-q可以在不需要读取内容的情况下确定文件不匹配,而cmp仍然需要通读,直到找到一个或另一个的结尾…是的,作为一个C开发人员,我强烈喜欢一种垂直空间保守的样式,在给定时间内最大化查看的代码量。。。因此,偏好至少是一致的。无论如何,因为这已经归结为一个骑自行车的问题,我很高兴收回我对这个话题的评论。这是一个诚实的回答,所以不应该被标记为不是一个答案。如果你不喜欢这个答案,你应该投反对票,而不是打旗子。