Bash 脚本结果

Bash script result

谁能解释一下下面的脚本是做什么的?

#!/bin/bash
for F in *.txt; do
  K=`grep abc $F`
  echo $K
  if ["$K" != ""]; then
        echo $F
  fi
done

我测试了它,当它找到一个包含 "abc" 字符串的 txt 文件时,出现提示

`"./a.sh: line 5: [abc: command not found"`

错误,否则出现不包含"abc"字符串的txt文件名

该脚本应该遍历当前目录中的所有“.txt”文件,为 abc 搜索它们,回显结果,如果找到该字符串,则打印文件名。然而,它有一个语法错误(你需要在 [] 周围加空格),用空格破坏文件名,而且比需要的更复杂。更好的版本是:

#!/bin/bash
for F in *.txt; do
  grep abc "$F" && echo "$F"
done

留下一个spaceafter[和一个spacebefore] 解决错误:

#!/bin/bash
for F in *.txt; do
  K=`grep abc $F`
  echo $K
  if [ "$K" != "" ]; then
        echo $F
  fi
done

你得到 [abc: command not found 是因为在你的 if 条件下 [ 之后和 ] 之前没有 space。

你甚至不需要 for 循环,你可以使用 grep -l:

grep -l 'abc' *.txt

您的脚本遍历当前目录中的所有 .txt 文件以搜索模式并在匹配的位置显示文件名。参考本教程http://www.tutorialspoint.com/unix_commands/grep.htm

您的代码此处有语法错误

if ["$K" != ""]

您需要在 [ 之后和 ] 之前放置一个 space 因此使用这个

if [ "$K" != "" ]