Bash: kawałek parametrów pozycyjnych

20

Jak mogę uzyskać kawałek $@Basha bez konieczności kopiowania wszystkich parametrów pozycyjnych do innej tablicy, takiej jak ta?

argv=( "$@" )
echo "${argv[@]:2}";
nr
źródło
1
Zawsze cytat "$@". Twoje argvzadanie zostanie zerwane, jeśli jakikolwiek argument zawiera spacje.
jordanm

Odpowiedzi:

31

Możesz użyć tego samego formatu, co dla dowolnej innej tablicy. Aby wyodrębnić 2. i 3. element $@, wykonaj:

echo "${@:1:2}"
          - -
          | |----> slice length
          |------> slice starting index 
terdon
źródło
1
Ale wydaje się, że działa to na zasadzie char by char w wersji 4.1.2, czy istnieje sposób, aby to zrobić na zasadzie słowo po słowie?
Alexej Magura
@AlexejMagura Nie rozumiem, co masz na myśli. Działa to na elementy tablicy. Jeśli masz elementy jednoznakowe, będzie działać „na postaciach”. Jeśli każdy element jest słowem, działa na słowa. Może próbujesz tego na sznurku, a nie na tablicy?
terdon
Próbuję tego na kopii „$ @”, która, jak sądzę, może w tym momencie stać się ciągiem, nie jestem pewien.
Alexej Magura,
W wersji bash 4.2.46 "${@:1:2}"faktycznie dostarcza mi argumentów z pierwszej i drugiej linii poleceń . Tymczasem "${@:1}"daje mi pełne argumenty wiersza poleceń i "${@:0}"podaje nazwę skryptu, a następnie pełne argumenty wiersza poleceń .
Rockallite,
@Rockallite dobrze, tak. Drugi i trzeci element $@ tablicy to pierwszy i drugi argument. "${@:1}"wypisze całą tablicę zaczynając od 2. elementu (1. argument) i ${@:0}całą tablicę zaczynając od 1. elementu, który jest nazwą skryptu. Czego się spodziewałeś?
terdon