grep
Komenda daje się status wyjścia:
$echo "foo.bar" | grep -o foo
foo
$echo $?
0
$echo "foo.bar" | grep -o pop
$echo $?
1
Ale muszę użyć sed
i zdałem sobie sprawę, że nie ma statusu wyjścia:
$echo "foo.bar" | sed 's/bar.*$//'
foo.
$echo $?
0
$echo "foo.bar" | sed 's/pop.*$//'
foo.bar
$echo $?
0
Wiem, że powinienem grać z tą -q
opcją, ale mi się nie udało.
sed
pewnością ma status wyjścia, po prostu nie robi tego, czego potrzebujesz tutaj. Jeślised
polecenie nie powiedzie się, na przykład, jeśli spróbujesz uruchomić go na pliku, do którego nie masz dostępu do zapisu lub plik, który nie istnieje,sed
zakończy działanie ze statusem wyjścia innym niż 0. Status wyjścia wskazuje tylko, czysed
udało się zrobić to, co mu kazano, iecho "foo.bar" | sed 's/pop.*$//'
został poprawnie wykonany. Usunął wszystkie linie za pomocąpop
. To, że nie było takich linii, nie ma znaczenia, polecenie nadal działało.