# plik receptury: func_shift_by

# Pobranie określonej liczby elementów z góry stosu
# i pozostawienia reszty do dalszego przetwarzania.
# Wywołanie: shift_by <# liczba obiektów do zachowania> <polecenie ls lub inne>
# Wynik: pozostała część stosu (listy)
#
# Można na przykład sporządzić listę obiektów, z których 10
# pierwszych zostanie zachowanych.
#
# Lista przekazywanych obiektów MUSI być przygotowana w taki sposób, aby
# na początku znajdoway się pozycje, które zostaną z niej usunięte.
# Funkcja usuwa po prostu odpowiednią liczbę pozycji z początku listy.
#
# Przed użyciem instrukcji rm, należy sprawdzić działanie polecenia z instrukcją echo!
# 
# Oto przykład:
#      rm -rf $(shift_by $LICZBA_KATALOGOW_DO_ZACHOWANIA $(ls -rd backup.2007*))
#

function shift_by {

# Jeśli zmienna $1 ma wartość 0 lub jest większa od $#, parametry pozycyjne nie są
# zmieniane. To oznacza błąd!
if (( $1 == 0 || $1 > ( $# -1 ) )); then
    echo ''
else
    # Usunięcie podanej liczby obiektów (plus 1) z listy.
    shift $(( $1+1 ))

    # Zwrócenie pozostałych obiektów.
    echo "$*"
fi
}
