有人可以解释一下下面的脚本是什么吗?
#!/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文件的名称。
答案 0 :(得分:2)
您获得[abc: command not found
是因为[
之后]
if
之后for
之前没有空格。
您甚至不需要grep -l
循环,您可以使用grep -l 'abc' *.txt
:
doctests
答案 1 :(得分:1)
该脚本应该遍历所有" .txt"当前目录中的文件,为abc
grep它们,回显结果,如果找到该字符串,则打印文件名。但是,它有一个语法错误(您需要[
和]
周围的空格),使用空格打破文件名,并且比所需的更复杂。更好的版本是:
#!/bin/bash
for F in *.txt; do
grep abc "$F" && echo "$F"
done
答案 2 :(得分:0)
在 [
之后留一个空格,在 ]
之前留一个空格来解决错误:
#!/bin/bash
for F in *.txt; do
K=`grep abc $F`
echo $K
if [ "$K" != "" ]; then
echo $F
fi
done
答案 3 :(得分:0)
您的脚本会遍历当前目录中的所有.txt
个文件,以搜索模式并显示匹配的文件名。请参阅本教程http://www.tutorialspoint.com/unix_commands/grep.htm
您的代码在这里有语法错误
if ["$K" != ""]
您需要在[
之后和]
之前放置一个空格,因此请使用此
if [ "$K" != "" ]