【问题标题】:Bash Shell - Print names of all self-referential filesBash Shell - 打印所有自引用文件的名称
【发布时间】:2017-01-25 04:19:04
【问题描述】:

这个想法是编写一个 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

【问题讨论】:

  • 请确保在此处验证您的脚本:shellcheck.net
  • 请在您的问题中添加“不起作用”的具体含义。

标签: unix for-loop


【解决方案1】:

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

试试这个版本 - 如果它不工作,必须有其他事情发生:

#!/bin/bash

for file in *
do
  if grep -qF "$file" "$file" 2> /dev/null
  then
    echo "$file"
  fi
done
  • -q 使grep 不输出匹配行(退出代码暗示是否找到匹配)。

  • -F 确保搜索词被视为文字(而不是正则表达式)。

【讨论】:

    猜你喜欢
    • 2017-04-22
    • 2015-02-21
    • 1970-01-01
    • 2017-01-28
    • 1970-01-01
    • 2014-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多