Burada tahmin edilebilir olmayan bir giriş varsa (örn. Manuel giriş) bir sorun var. Geleceğe önemsizce söyleyemezseniz (ör. while read lineYapı yoluyla ) sonrakinin ne olduğunu bilirsiniz. Ayrıca, giriş durduğunda döngü durduğundan, belirli bir satırı saklamanız ve "dönüşe döndüğünden" sonra üzerinde hareket etmeniz gerekecektir . Daha önce değil, sonuncusu olup olmadığını biliyor musunuz? Girdi sabit bir dizge veya dosya ise, pratik olandan daha teorik bir konudur.
İstediğinizi yapmak için bir prototip:
unset lastline
while read line; do
if ! [ -z "$lastline" ]; then
echo "$lastline"
fi
lastline=$line
done <<< "$lines"
echo "This is the last one: $lastline"
unset lastlineAynı betiği örneğin bir terminalde birden çok kez çalıştırırsanız, o $lastlinezamandan beri boş olmayabilir. Bu echobir sorun olabilirse , en sondan sonra da temizleyebilirsiniz .
! [ -z "$lastline" ]$lastlinedeğişken boş değilse ( true , teknik olarak dizenin uzunluğu sıfır değilse) true değerini döndürür . Bakın man testbu testlere alışık değilseniz.
(Bağırsaklarım size gerçekte ne yapmaya çalıştığınızı sormak istemesine rağmen :-).)