Aby zapewnić uzupełnienia i wyjaśnienia niektórych innych odpowiedzi, jeśli używasz opcji zbiorczej dla execlub execdir( -exec command {} +) i chcesz odzyskać wszystkie argumenty pozycyjne, musisz rozważyć obsługę $0z bash -c. Mówiąc bardziej konkretnie, rozważ poniższe polecenie, które używa bash -cjak zasugerowano powyżej, i po prostu wyświetla ścieżki plików kończące się na „.wav” z każdego znalezionego katalogu:
find "$1" -name '*.wav' -execdir bash -c 'echo $@' _ {} +
Podręcznik bash mówi:
If the -c option is present, then commands are read from the first non-option argument command_string. If there are arguments after the command_string, they are assigned to the
positional parameters, starting with $0.
Oto 'check $@'ciąg polecenia i _ {}argumenty występujące po nim. Zauważ, że $@jest to specjalny parametr pozycyjny w bash, który rozszerza się na wszystkie parametry pozycyjne, zaczynając od 1 . Zauważ również, że przy tej -copcji pierwszy argument jest przypisywany do parametru pozycyjnego $0. Oznacza to, że jeśli spróbujesz uzyskać dostęp do wszystkich parametrów pozycyjnych za pomocą $@, otrzymasz parametry tylko od początku $1do góry. Dlatego odpowiedź Dominika zawiera _argument, który jest fikcyjnym argumentem służącym do wypełnienia parametru $0, więc wszystkie argumenty, które chcemy, będą dostępne później, jeśli użyjemy $@na przykład rozszerzenia parametrów lub pętli for jak w tej odpowiedzi.
Oczywiście, podobnie jak w przypadku zaakceptowanej odpowiedzi, bash -c 'shell_function $0 $@'działałby również jawnie $0, ale trzeba pamiętać, że $@nie będzie działać zgodnie z oczekiwaniami.
$0.