Linux BASH:可以在命令行上执行grep,但不能在脚本中执行grep

Linux BASH:可以在命令行上执行grep,但不能在脚本中执行grep,linux,bash,grep,Linux,Bash,Grep,这已经有一百万次了,但这次不行了 我尝试从文件中grep“$TITLE”。在命令行上,它正在工作,“$TITLE”变量不是空的,但当我运行脚本时,它找不到任何内容 *标题包含多个单词 echo "$TITLE" cat PAGE.$TEMP.2 | grep "$TITLE" 我所尝试的: echo "cat PAGE.$TEMP.2 | grep $TITLE" 要查看标题是否为空,文件名是否实际存在,请执行以下操作: ~> cat test.dat abc cda xyz ~>

这已经有一百万次了,但这次不行了 我尝试从文件中grep“$TITLE”。在命令行上,它正在工作,“$TITLE”变量不是空的,但当我运行脚本时,它找不到任何内容

*标题包含多个单词

echo "$TITLE"
cat PAGE.$TEMP.2 | grep "$TITLE"
我所尝试的:

echo "cat PAGE.$TEMP.2 | grep $TITLE"
要查看标题是否为空,文件名是否实际存在,请执行以下操作:

~> cat test.dat
abc
cda
xyz
~> export GRP=cda
~> cat test.dat | grep $GRP
cda
编辑:

使用
grep
的正确方法还有:

~> grep $GRP test.dat

您确定
$TITLE
没有文件中没有的前导或尾随空格吗?您对字符串的修复会在执行之前去掉空白,所以它不会看到它

例如,对于包含“第一行”的文件:

/home/user1> TITLE=' one '
/home/user1> grep "$TITLE" text.txt
/home/user1> cat text.txt | grep $TITLE
Line one
尝试
echo”“
,或
echo“$TITLE”| od-xc
,这将使您能够发现错误的字符。

此命令

echo "cat PAGE.$TEMP.2 | grep $TITLE"
回显以“cat”开头的字符串。它不运行命令。你会想要

echo "$( cat PAGE.$TEMP.2 | grep $TITLE )"
虽然这在功能上与更简单的

cat PAGE.$TEMP.2 | grep $TITLE
正如其他人所指出的那样,没有必要使用
cat
来传输单个文件<代码>grep可以很好地读取文件:

grep "$TITLE" "PAGE.$TEMP.2"

(您的默认行为应该是引用参数扩展,除非您可以证明这样做是不正确的。)

您是否确实尝试过使用该值对文件进行
grep
处理?也许这个标题真的不在文件里。是的,我试过了,它100%在那里。我甚至还获取了echo“cat PAGE.$TEMP.2 | grep$TITLE”的输出并运行了它,但是第一次你在
“$TITLE”
周围有引号,第二次你不工作了!谢谢你,伙计!od-xc帮助了我,很棒的工具。我添加了tr-d'\r\n\,解决了这个问题。