Bash Shell - 打印所有自引用文件的名称

时间:2017-01-24 19:24:22

标签: unix for-loop

这个想法是编写一个bash脚本,它打印当前目录中包含自己内容名称的文件名。

例如,如果一个名为hello的文件包含字符串hello,我们打印hello,我们对当前目录中的所有文件执行此操作

这是我写的,我不知道它为什么不起作用。

#!/bin/bash

for file in *
do
  if (cat $file | grep $file) 2> /dev/null
  then
    echo $file
  fi
done

修正:

#!/bin/bash

for file in *
do
  if grep $file $file 2> /dev/null
  then
    echo $file
  fi
done

1 个答案:

答案 0 :(得分:3)

除了引用问题,潜在的正则表达式转义问题以及无用的cat(...)之外,您的代码原则上应该

试试这个版本 - 如果它不起作用,必须继续其他事情:

#!/bin/bash

for file in *
do
  if grep -qF "$file" "$file" 2> /dev/null
  then
    echo "$file"
  fi
done
  • -q使grep无法输出匹配的行(退出代码是否隐含了匹配项)。

  • -F可确保将搜索字词视为文字(而非正则表达式)。