退出状态部分报告中的grep手册:
EXIT STATUS The exit status is 0 if selected lines are found, and 1 if not found. If an error occurred the exit status is 2. (Note: POSIX error handling code should check for '2' or greater.)
但是命令:
echo ".
..
test.zip"|grep -vE '^[.]'
echo $?
echo "test.zip
test.txt"|grep -vE '^[.]'
echo $?
返回的值总是0.我会预期为1和0.我做错了什么?
答案 0 :(得分:1)
请记住,grep
是基于行的。如果任何一行符合,你就得到一个匹配。 (在您的第一种情况下test.zip
匹配(更确切地说:您与-v
一起使用,因此您要求的行与您的模式不匹配,而test.zip
完全符合,即不匹配你的模式。结果你的grep调用成功了。比较
$ grep -vE '^[.]' <<<$'.\na'; echo $?
a
0
与
$ grep -vE '^[.]' <<<$'.\n.'; echo $?
1
注意第一个命令如何输出行a
,即它找到匹配,这就是退出状态为0的原因。将其与第二个示例进行比较,其中没有匹配的行。
<强>参考强>
<<<
是一个字符串:
Here Strings
A variant of here documents, the format is:
[n]<<<word
The word undergoes brace expansion, tilde expansion, parameter and
variable expansion, command substitution, arithmetic expansion, and
quote removal. Pathname expansion and word splitting are not per-
formed. The result is supplied as a single string, with a newline
appended, to the command on its standard input (or file descriptor n if
n is specified).
$ cat <<<'hello world'
hello world
$'1\na'
用于获取多行输入(\n
替换为$'string'
中的换行符,有关详情,请参阅man bash
)。
$ echo $'1\na'
1
a