下面的脚本输出为空。它缺少什么?我想用grep一个字符串shell脚本grep 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
下面的脚本输出为空。它缺少什么?我想用grep一个字符串shell脚本grep 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
在bash
,使用<<<
重定向从一个字符串('Here string'):
if grep -q abc_def_APP <<< $file
在其他炮弹,你可能需要使用:
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
如果我使用'if echo $ file | grep -q abc_def_APP这是打印$文件的内容,我不想 – Jill448 2013-05-09 18:12:15
您选择了'-q'选项使'grep'以'quiet'模式运行(每个[POSIX](http:// pubs .opengroup.org/onlinepubs/9699919799 /公用事业/ grep.html));它不应该输出任何东西。如果你的'grep'版本对'-q'有不同的理解,你必须看看你的man'grep'的手册页,或者重定向到'/ dev/null'。 – 2013-05-09 18:16:13
第一个人工作。 '如果grep -q abc_def_APP <<< $文件' – Jill448 2013-05-09 18:17:06
Yu!使用外壳的字符串匹配
if [[ "$file" == *abc_def_APP* ]]; then ...
你不用冒着与'* abc_def_APP *'匹配多个文件的风险并且破坏了这个过程中的条件吗?如果'$ file'为'abc_def_APP1'且'* abc_def_APP *'扩展为'abc_def_APP1 abc_def_APP2',那么该条件将被评估为false。 – Anthony 2014-11-01 13:08:22
和关于“Yuck!”部分我完全同意你的看法!整个unix(unix-like)命令外壳令人恶心......但你不能没有它,你能吗? – Anthony 2014-11-01 13:14:02
在双括号内,我们模式匹配左侧字符串,不匹配文件名。 – 2014-11-02 02:32:30
为什么#!行说ksh? – jman 2013-05-09 18:09:16
'file'应该是什么值?我怀疑你可能在该作业的RHS上存在问题。 – chepner 2013-05-09 18:14:07