Wenn Sie die Bulk-Option für exec
oder execdir
( -exec command {} +
) verwenden und alle Positionsargumente abrufen möchten, um Ergänzungen und Erläuterungen zu einigen anderen Antworten bereitzustellen , müssen Sie die Behandlung $0
mit berücksichtigen bash -c
. Betrachten Sie genauer den folgenden Befehl, der bash -c
wie oben vorgeschlagen verwendet wird, und geben Sie einfach Dateipfade aus, die mit '.wav' enden, aus jedem gefundenen Verzeichnis:
find "$1" -name '*.wav' -execdir bash -c 'echo $@' _ {} +
Das Bash-Handbuch sagt:
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.
Hier 'check $@'
ist die Befehlszeichenfolge und _ {}
sind die Argumente nach der Befehlszeichenfolge. Beachten Sie, dass dies $@
ein spezieller Positionsparameter in bash ist, der ab 1 auf alle Positionsparameter erweitert wird . Beachten Sie auch, dass bei dieser -c
Option das erste Argument dem Positionsparameter zugewiesen wird $0
. Das heißt, wenn Sie versuchen, auf alle Positionsparameter mit zuzugreifen $@
, erhalten Sie nur Parameter ab $1
und nach. Dies ist der Grund, warum Dominiks Antwort das _
Dummy-Argument zum Füllen von Parametern enthält $0
, sodass alle gewünschten Argumente später verfügbar sind, wenn wir beispielsweise die $@
Parametererweiterung oder die for-Schleife wie in dieser Antwort verwenden.
Ähnlich wie bei der akzeptierten Antwort bash -c 'shell_function $0 $@'
würde dies natürlich auch durch explizites Übergeben funktionieren $0
, aber auch hier müssten Sie bedenken, dass dies $@
nicht wie erwartet funktioniert.
$0
.