5

以下脚本的输出为空白。它缺少什么?我正在尝试 grep 字符串

#!/bin/ksh    
file=$abc_def_APP_13.4.5.2    
if grep -q abc_def_APP $file; then
 echo "File Found"
else
 echo "File not Found"
fi
4

2 回答 2

10

bash中,使用<<<来自字符串的重定向('Here string'):

if grep -q abc_def_APP <<< $file

在其他 shell 中,您可能需要使用:

if echo $file | grep -q abc_def_APP

我把我then的放在下一行;如果你想让你then在同一行,那么; then在我写的之后添加。


请注意,此分配:

file=$abc_def_APP_13.4.5.2

很奇怪;它获取环境变量的值${abc_def_APP_13}并添加.4.5.2到末尾(它必须是 env var,因为我们可以看到脚本的开头)。你可能打算写:

file=abc_def_APP_13.4.5.2

通常,您应该将对包含文件名的变量的引用括在双引号中,以避免文件名中出现空格等问题。这里并不重要,但好的做法就是好的做法:

if grep -q abc_def_APP <<< "$file"
if echo "$file" | grep -q abc_def_APP
于 2013-05-09T18:10:54.117 回答
3

呸!使用 shell 的字符串匹配

if [[ "$file" == *abc_def_APP* ]]; then ...
于 2013-05-09T19:19:56.430 回答