我在将模式从脚本文件读取到另一个文件时遇到问题。基本上,一个文件的输出应该用作另一脚本文件的输入。 maze_gen 的输出是 # 和空格符号的数组。下面的示例 5 7 表示输出的高度和宽度。
if [`./maze_gen 5 7 | grep -E "[^# ]"` ]; then
echo no
else
echo yes
fi
这maze_gen
是一个生成一系列#
带空格符号的文件。这将作为我当前正在处理的输入文件接收。我的代码有问题,我无法检查输入是否只有#
字符。
答案1
看起来您想测试 的输出是否./maze_gen 5 7
包含除空格和散列之外的字符。
您可以使用更有效地做到这一点
if ./maze_gen 5 7 | grep -q '[^ #]'
then
echo no
else
echo yes
fi
这实际上并不提炼与表达式匹配的行。相反grep -q
,一旦模式匹配就退出,并且语句grep
中使用 的退出状态if
来确定要采用哪个分支(echo no
或echo yes
)。
这比您似乎想要做的更有效,因为grep
一旦模式匹配,实用程序就会停止处理其输入,并且 shell 不必存储输出以grep
在字符串比较测试中使用。
您的代码无法运行,因为它包含语法错误。[
周围需要空间。
另请注意,-E
可以使用 的某些实现来启用扩展正则表达式grep
。在您的例子中,不需要这样做,因为表达式是基本的正则表达式。