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}";

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 

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.