我正在尝试编写一个脚本,当读取的行不包含*
该行中的符号时,该脚本会执行某些操作。
我尝试了以下方法但没有成功:
if [ grep -v -q '*' ]
这会导致参数过多错误if [ "$(grep -v -q '*')" -eq '0' ];
这会导致一元运算符预期错误。
我究竟做错了什么?
答案1
[
if 语句将接受任何产生退出状态的内容,因此要么是像or这样的内置 shell,test
要么是像grep
.您可以同时使用:
if [ "$(grep -c '*' file)" = 0 ]
then
echo 'star symbol not found'
fi
但确实不需要:
if ! grep -q '*' file
then
echo 'star symbol not found'
fi
或者:
while read x
do
if ! grep -q '*' <<eof
$x
eof
then
printf '%s does not contain star symbol\n' "$x"
fi
done < file
或者:
awk '!/\*/ {print $0, "does not contain star symbol"}' file